This version marks a significant milestone: yash now implements almost all behaviors required by POSIX.1-2024, making it nearly fully compliant with the latest POSIX specification. The update includes numerous refinements to improve standards conformance, such as more precise handling of job control, parameter expansion errors, built-in utility behaviors, and interactive shell operations.
Notable improvements in POSIX.1-2024 support include:
- Better handling of typed but unexecuted commands when errors or job suspensions occur in an interactive shell.
- Enhanced job control semantics when suspending foreground pipelines.
- More accurate behavior in built-ins such as
read
,trap
,cd
,wait
, andtest
. - New support for the
read -d
option and refined exit status handling in several built-ins. - Safer pathname expansion, tighter redirection rules, and improved interactive shell detection.
While yash now closely aligns with POSIX.1-2024, one major known limitation remains:
POSIX requires that shells handle strings as raw multibyte data and transparently accept non-character bytes in some contexts. However, yash internally represents strings as wide characters, making full compliance with these requirements infeasible. Addressing this would require a fundamental rewrite of nearly all code handling strings, and therefore we do not plan to implement this feature. Further details about this limitation and other incomplete areas of POSIX.1-2024 conformance can be found in issue #84 and the related issues linked from it.
Beyond standards compliance, yash 2.59 also includes:
- Bug fixes, including a potential crash in
read
, subshell job-control issues, and a workaround for a glibc bug affecting history file updates. - Improved command-line completion scripts, with new support for tools such as
git-mv
,bmake
,gmake
,cmus
, andcatgirl
, and better behavior in completions forcd
andpushd
.
We encourage all users to upgrade to take advantage of the improved POSIX compliance, enhanced stability, and expanded usability.
What's Changed
- trap: Implement POSIX.1-2024 requirements by @magicant in #115
- read: Avoid crash in interactive shell by @magicant in #116
- history: Work around glibc's fsetpos bug by @magicant in #117
- add completion for make variant commands by @unrealapex in #110
- Update Git completion by @magicant in #120
- wait: Don't return when the target process is suspended by @magicant in #121
- Support POSIX.1-2024 read built-in behavior (except byte-wise field splitting) by @magicant in #123
- Change false, pwd, and true to substitutive built-ins by @c0d3-br3ak9r in #124
- Reject empty operand in cd built-in by @c0d3-br3ak9r in #126
- Ignore remaining commands after a foreground job stops by @magicant in #143
- Treat a job as suspended when any child process suspends by @magicant in #144
- Noglob when splitting $CDPATH at colons in cd and pushd completion by @magicant in #147
- add completion for fnf by @unrealapex in #140
- add completion for 'cmus' and 'cmus-remote' by @unrealapex in #141
- add completion for 'catgirl' by @unrealapex in #142
- Ignore SIGTSTP in process redirection subshells by @magicant in #148
- Add macOS workaround for test of suspended job by @magicant in #150
- Job control without a control terminal by @magicant in #149
- Discard remaining commands on shell errors if interactive by @magicant in #151
- Filter '.' and '..' from wglob results by @eilefsen in #152
- Report job number and PID for async commands in interactive shell by @magicant in #155
- Propagate signal exit status to parent process by @magicant in #156
- printf: Reject redundant character in numeric operand by @magicant in #157
- Reject multiple pathname expansion results in redirection operands by @magicant in #158
- Set interactive automatically even with positional parameters by @magicant in #160
- test: Reject -a, -o, and parentheses in POSIXly-correct mode by @magicant in #161
- Fix default exit status of exit built-in in trap action by @magicant in #162
- Keep empty tilde expansion from empty field removal by @magicant in #164
- Remove redundant trailing slash in tilde expansion by @magicant in #166
- Reject
{n}
redirection prefix by @magicant in #167 - Document hashondef and nolog options for POSIX.1-2024 by @magicant in #168
- Treatment of variables that should not be made readonly by @magicant in #169
- Reject making LINENO, OLDPWD, OPTARG, OPTIND, and PWD readonly by @magicant in #170
- Update NEWS by @magicant in #119
New Contributors
- @c0d3-br3ak9r made their first contribution in #124
- @eilefsen made their first contribution in #152
Full Changelog: 2.58.1...2.59