1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-04-18 15:54:03 +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>
* 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.
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
-------------------

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
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
insecure elements from the set of completion functions, where previously