Releases: fermat-tech/posh
Release list
posh v1.3.59
Test-suite maintenance release. No changes to the shell itself — these binaries behave identically to v1.3.59's predecessor, v1.3.58.
Fixed
-
Fixed the
internal/evaltest helpers silently losing output when a pipeline stage ran an external command.The helpers gave the same
bytes.Bufferto bothShell.StdoutandShell.Stderr. Go'sexecdrains an external child's stderr withio.Copy, which prefers anio.ReaderFrom;bytes.Buffer.ReadFromrecords the buffer length on entry, blocks until the child's stderr reaches EOF, then truncates back to that length plus the bytes it read. A child writing no stderr reads zero, so the final re-slice discarded whatever a concurrent stage had appended.This made
TestReadHeredocPipelinefail against correct shell behaviour:cat << EOF | while read line; do echo "$line"; donereturned an empty string undergo test, whileposhitself has always run it correctly. The shell binary passes real*os.Filestreams, whichexecinherits directly and never copies, so no released build was ever affected.
v1.3.58
- Add bash-style built-in variables:
$_,$-,$!,$OLDPWD(+cd -),$USER,$HOSTNAME,$SHELL,$RANDOM,$SECONDS, and$POSHPID(posh's name for bash's$BASHPID).$PWDis now seeded at startup, not just after the firstcd. - Fix TAB completion never offering
$RANDOM,$SECONDS, or$POSHPID, since those are computed on the fly rather than stored.
v1.3.57
- Fix a stale Ctrl+C interrupt silently dropping a later statement in a
;-separated command with no error shown (e.g.cd ..;pwould cd but never print output). Pressing Ctrl+C to abort or retype a command at the prompt set a process-wide flag that lingered until the next unrelated command consumed it. The flag is now cleared before each new top-level command starts.
v1.3.56
- Fix
kill %non a backgrounded compound command (e.g.(while true; do ...; done) &) waiting for whatever it was currently running to finish naturally before actually stopping the job. It now kills the currently-running process immediately, matching bash.
v1.3.55
- Fix a race where a backgrounded plain command (e.g.
sleep 3 &) could be missing fromjobs -lif checked immediately on the next line, since job registration happened asynchronously with no synchronization at all. - A second separator immediately after the first (e.g.
cmd &;,cmd ;;outside a case body) is now a syntax error, matching bash, instead of silently truncating the input and dropping everything after the stray separator with no error.
v1.3.54
- Fix double-quoted alias values (and other mixed-quoted words) truncating at the first internal whitespace, e.g.
alias gsd="git status"silently becamegsd=git. A mid-word double-quoted segment now protects its internal whitespace from word-splitting the same way a mid-word single-quoted segment already did.
v1.3.53
- Ctrl+C now cancels a running loop (e.g.
while true; do echo 1; sleep 5; done), not just the one external command currently running inside it. - Backgrounding a compound command (a subshell, loop, or group -- e.g.
(while true; do ...; done) &) is now tracked as a job:jobs -l,kill %n, andwaitall work on it, where before it ran as an untracked, unstoppable goroutine.
v1.3.52
- Fix \ TAB completion to include array variables, matching bash. Previously only scalar variables were considered, so a prefix matching both a scalar and an array variable (e.g.
\matching \ and ) resolved as a single match instead of listing both alternatives on a second TAB, the way bash lists \ and \ for .
v1.3.51
- Add
\and\, mirroring bash's\/\.POSH_VERSINFOis a real array (major minor patch machtype); a bare\(no index) gives the major version, same as bash.
v1.3.50
- Add
--version, matching bash's layout (program identity, copyright, license, warranty disclaimer). Reports the actual release tag. - The program name shown in
help,--version, and error messages now consistently follows the invoked binary's name (rename-friendly identity) --help's title previously hardcoded 'posh'.