1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-06-11 07:08:07 +02:00

51193: Discuss ERR_EXIT changes

This commit is contained in:
Philippe Altherr 2022-12-13 21:01:47 -08:00 committed by Bart Schaefer
parent 67d4bf5bb9
commit 8a45f16d83
3 changed files with 62 additions and 2 deletions

View file

@ -1,3 +1,7 @@
2022-12-13 Bart Schaefer <schaefer@zsh.org>
* Philippe Altherr: 51193: NEWS, README: Discuss ERR_EXIT changes
2022-12-12 Peter Stephenson <p.stephenson@samsung.com> 2022-12-12 Peter Stephenson <p.stephenson@samsung.com>
* 51134: Doc/Zsh/options.yo: document interactions between * 51134: Doc/Zsh/options.yo: document interactions between

8
NEWS
View file

@ -4,6 +4,14 @@ CHANGES FROM PREVIOUS VERSIONS OF ZSH
Note also the list of incompatibilities in the README file. Note also the list of incompatibilities in the README file.
Changes since 5.9
-----------------
The ERR_EXIT and ERR_RETURN options were refined to be more self-
consistent and better aligned with the POSIX-2017 specification of
`set -e`. For details on what exactly changed, see the list of
incompatibilities in the README file.
Changes since 5.8.1 Changes since 5.8.1
------------------- -------------------

52
README
View file

@ -31,8 +31,56 @@ Zsh is a shell with lots of features. For a list of some of these, see the
file FEATURES, and for the latest changes see NEWS. For more file FEATURES, and for the latest changes see NEWS. For more
details, see the documentation. details, see the documentation.
Incompatibilities since 5.8.1 Incompatibilities since 5.9
----------------------------- ---------------------------
The ERR_EXIT and ERR_RETURN options were refined to be more self-
consistent and better aligned with the POSIX-2017 specification of
`set -e`:
- Function calls or anonymous functions prefixed with `!` now never
trigger exit or return. Negated function calls or anonymous
functions used to trigger exit or return if ERR_EXIT or ERR_RETURN
was set and the function call or anonymous function returned a
zero exit status. Example:
setopt ERR_EXIT
f() { true }
! f
echo "This is printed only since 5.10."
- The `always` command now ignores ERR_EXIT and ERR_RETURN, as other
complex commands do, if its exit status comes from a command
executed while the option is ignored. Example:
setopt ERR_EXIT
{ false && true } always { echo "This was and still is printed." }
echo "This is printed only since 5.10."
- Function calls, anonymous functions, and the `eval`, `.`, and
`source` builtins now never ignore ERR_EXIT and ERR_RETURN on
their own. These commands used to ignore ERR_EXIT and ERR_RETURN
if their result came from a complex command (if, for, ...) whose
result came from a command executed while the option is
ignored. Example:
setopt ERR_EXIT
f() { if true; then false && true; fi }
f
echo "This is printed only prior to 5.10."
- The `&&` and `||` operators now always ignore ERR_RETURN in their
left operand. Until this version, the operators failed to ignored
ERR_RETURN in their left operand if they were executed as part of
a function call or an anonymous function that was itself executed
in a context where ERR_RETURN is ignored. Example:
setopt ERR_RETURN
f() { { false; echo "This is printed only since 5.10." } || true }
if f; then true; fi
Incompatibilities between 5.8.1 and 5.9
---------------------------------------
compinit: A "y" response to the "Ignore ... and continue?" prompt removes compinit: A "y" response to the "Ignore ... and continue?" prompt removes
insecure elements from the set of completion functions, where previously insecure elements from the set of completion functions, where previously