Bourne
|
Ash
|
#!
|
find
|
ARG_MAX
|
Shells
|
whatshell
|
portability
|
permissions
|
UUOC
|
ancient
| -
|
../Various
|
HOME
"$@
"
|
echo/printf
| set -e
|
test
|
tty defs
|
tty chars
|
$()
vs )
|
IFS
|
using siginfo
|
nanosleep
|
line charset
|
locale
"set -e
" in various shells
2015年10月15日 (see recent changes)
Variations in the handling of set -e and the resulting exit status
among the various traditional and POSIX conformant implementations.
Here are deep links to the definition in
SUSv2,
SUSv3,
SUSv4.
See a
discussion
(and the topic igniting it a few days before)
about this on the Austin Group (SUS/POSIX) discussion mailing list
archive, starting on Feb 16 2009
with consensus that the wording has to be improved to become more consistent and to match existing practice.
See entry 0000537
(and the related 0000052)
in the Austin Group Issue Tracker.
Possible questions about set -e:
- Do you expect "find|xargs" to exit, if find fails?
It does not because the exit status of a pipeline is determined by the last command (existing practice).
- How should negated commands or pipelines behave? Examples: "! true" and "! false"
(Is it a syntactical construct; or is this "making use" of the exit code? Existing practice also becomes relevant.)
- Should subshells inherit the flag? Example: "(false; echo foo)"
- Should set -e re-enable the flag in subshells? Example: "(set -e; false; echo foo)"
- Is the first command in a group relevant at all? "{cmd1; cmd2; } || cmd3
If not, then, is the first command in a function relevant? Is a function just a "named" group?
- Do you expect a failing subshell "(false)" to exit the parent shell, too?
Using set -e has its quirks. As alternative, you can connect your commands with &&
,
or break out with ||alternative_cmd
in critical places.
The following table lists tests results, most of them originate from
or are inspired by the austin list.
Take the columns as pairs, with the shell output to the left and
the exit status $? to the right.
A second table with tests suggested by David Korn on the austin-list follows below.
The two tables eventually should be merged.
commandline
V7-sh
$?
SVR2
sh
ultrix
$?
SVR3
sh
sun413
$?
SVR4
sh
sun5.1
$?
SVR4
sh
sun5.10
$?
ksh86a
ep/ix
$?
ksh88d
ep/ix
$?
ksh88g
sun53
$?
ksh88i
sun5.9
$?
ksh93
-k
$?
ksh93
-t
$?
pdksh
-5.2.14
$?
posh-
0.6.17
$?
hist.
ash
$?
bash-
1.05
$?
bash-
1.14.0
$?
bash-
1.14.7
$?
bash-
3.2.48
$?
bash-
3.2.48
--posix
$?
bash-
4.0.35
$?
bash-
4.0.35
--posix
$?
dash-
0.3.4
$?
dash-
0.3.8
$?
dash-
0.5.5.1
$?
dash-
0.5.5.1
-4
$?
zsh-
3.0.8
$?
zsh-
4.3.9
$?
false; echo $?
1
1
255
255
255
1
1
1
1
1
1
1
1
1
1 0
255
1
1
1
1
1
1
1
1
1
1
1
set +e; false; echo $?
1
1 0
255 0
255 0
255 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
255 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
! false; echo $?
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
0 0
0 0
0 0
0 0
0 0
N/A 2
N/A 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
! true ; echo $?
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
1 0
1 0
1 0
1
1
N/A 2
N/A 0
1 0
1 0
1 0
1 0
1 0
1 0
1
1 0
1 0
1 0
1
1
! ! false ; echo $?
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
1 0
1 0
1 0
1
1
N/A 2
N/A 0
N/A 1
N/A 1
N/A 2
N/A 2
N/A 2
N/A 2
1
N/A 2
N/A 2
N/A 2
N/A 0
N/A 1
(false; echo foo); echo \ $?
1
1
255
255
255
1
1
1
1
1
1
1
1 0
1
foo 0 0
255 0
139
1 0
1 0
1
1
1
1 0
1 0
1
1
1
(! false; echo foo); echo \ $?
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
N/A 2
N/A 0
foo 0 0
139
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
(! true; echo foo); echo \ $?
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
foo 0 0
foo 0 0
foo 0 0
1
1 0
N/A 2
N/A 0
foo 0 0
139
foo 0 0
foo 0 0
foo 0 0
foo 0 0
1
foo 0 0
foo 0 0
foo 0 0
1
1
for i in .; do (false; echo foo); echo \ 1:$?; done; echo \ 2:$?
1
1
255
255
255
1
1
1
1
1
1
1
1:1 2:0 0
1
foo 1:0 2:0 0
1:255 2:0 0
139
1:1 2:0 0
1:1 2:0 0
1
1
1
1:1 2:0 0
1:1 2:0 0
1
1
1
for i in .; do false && true; echo \ 1:$?; done; echo \ 2:$?
1
1:1 2:0 0
1:255 2:0 0
1:255 2:0 0
1:255 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1
1:1 2:0 0
1:255 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
for i in x x ; do echo x; false && true; done; echo \ 2:$?
x 1
xx 2:1 0
xx 2:255 0
xx 2:255 0
xx 2:255 0
? ?
? ?
xx 2:1 0
xx 2:1 0
xx 2:1 0
xx 2:1 0
x 1
x 1
x 1
xx 2:0 0
xx 2:255 0
xx 2:1 0
xx 2:1 0
xx 2:1 0
xx 2:1 0
xx 2:1 0
x 1
xx 2:1 0
xx 2:1 0
xx 2:1 0
xx 2:1 0
xx 2:1 0
false| true; echo $?
1
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
true | false; echo $?
1
1
255
255
255
1
1 0
1
1
1
1
1
1
1
1 0
255
1
1
1
1
1
1
1
1
1
1
1
true |(false; echo foo); echo \ $?
1
1
255
255
255
1
1 0
1
1
1
1
1
1
1
foo 0 0
255 0
139
1 0
1 0
1
1
1
1
1
1
1
1
(false; echo foo) | cat ; echo \ $?
1
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
foo 0 0
0 0
139
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
(false; echo foo) || echo bar; echo \ $?
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
bar 0 0
foo 0 0
foo 0 0
139
foo 0 0
foo 0 0
foo 0 0
foo 0 0
bar 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
(set -e; false; echo foo) || echo bar; echo \ $?
1
foo 0 0
foo 0 0
foo 0 0
bar 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
bar 0 0
foo 0 0
foo 0 0
139
foo 0 0
foo 0 0
foo 0 0
foo 0 0
bar 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
{ false; echo foo;}| cat ; echo \ $?
1
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
foo 0 0
0 0
139
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
{ false; echo foo;}|| echo bar; echo \ $?
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
{ set -e; false; echo foo;}|| echo bar; echo \ $?
1
foo 0 0
foo 0 0
foo 0 0
255
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
echo foo | while read x ; do (false) ; done; echo $?
1
1
255
255
255
1
1 0
1
1
1
1
1
1
1
0 0
255 0
139
1 0
1 0
1
1
1
1
1
1
1
1
echo foo | while read x ; do (false) ; done | true; echo $?
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
139
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
true && false; echo $?
1
1
255
255
255
1 0
1
1
1
1
1
1
1
1
1 0
255
1
1
1
1
1
1
1
1
1
1
1
false && false; echo $?
1
1 0
255 0
255 0
255 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1
1 0
255 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
false && true; echo $?
1
1 0
255 0
255 0
255 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1
1 0
255 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
false || echo $?
1
1 0
255 0
255 0
255 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
255 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
false || true; echo $?
1
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
false || false; echo $?
1
1
255
255
255
1 0
1
1
1
1
1
1
1
1
1 0
255
1
1
1
1
1
1
1
1
1
1
1
false `true` || echo $?
1
1
255
255
255
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
255 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
(false && false; echo foo) ; echo \ $?
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
1
foo 0 0
foo 0 0
139
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
(false && false ) ; echo \ $?
1
1
255
255
255
1
1
1
1
1
1
1
1 0
1
1 0
255 0
139
1 0
1 0
1
1
1
1 0
1 0
1
1
1
if false; then :; else echo \ 1:$?; fi; echo \ 2:$?
1
1:1 2:0 0
1:255 2:0 0
1:255 2:0 0
1:255 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:255 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
if false; then :; else false; echo foo; fi; echo \ 2:$?
1
1
255
255
255
foo 2:0 0
1
1
1
1
1
1
1
1
foo 2:0 0
255
1
1
1
1
1
1
1
1
1
1
1
if ! false; then :; else echo \ 1:$?; fi; echo \ 2:$?
N/A 1
N/A 1
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
N/A 0
N/A 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
if ! false; then :; else false; echo foo; fi; echo \ 2:$?
N/A 1
N/A 1
N/A 255
N/A 255
N/A 255
N/A 0
N/A 1
N/A 1
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
N/A 1
N/A 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
if `false`; then :; else echo \ 1:$?; fi; echo \ 2:$?
1
1
255
255
255
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
2:0 0
1:1 2:0 0
1:255 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
1:1 2:0 0
2:0 0
1:1 2:0 0
if `false`; then :; else false; echo foo; fi; echo \ 2:$?
1
1
255
255
255
foo 2:0 0
1
1
1
1
1
1
1
2:0 0
foo 2:0 0
255
1
1
1
1
1
1
1
1
1
2:0 0
1
if true; then false; echo foo; fi; echo \ 2:$?
1
1
255
255
255
foo 2:0 0
1
1
1
1
1
1
1
1
foo 2:0 0
255
1
1
1
1
1
1
1
1
1
1
1
if ! true; then false; echo foo; fi; echo \ 2:$?
N/A 1
N/A 1
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
N/A 2
N/A 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
2:0 0
if true; then : `false`; fi; echo $?
1
1
255
255
255
1 0
1
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
if true; then : `false`; echo foo; fi; echo \ $?
1
1
255
255
255
foo 0 0
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
echo `false; echo foo`; echo \ $?
1
1
255
255
255
1
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
foo 0 0
0 0
foo 0 0
foo 0 0
0 0
foo 0 0
0 0
0 0
foo 0 0
foo 0 0
foo 0 0
0 0
0 0
f() { false; echo foo; }; f; echo \ $?
N/A 2
1
255
255
255
1
1
1
1
1
1
1
1
1
foo 0 0
255
1
1
1
1
1
1
1
1
1
1
1
f() { false; echo foo; }; f || echo foo2; echo \ $?
N/A 2
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
f() { false && false; echo foo; }; f; echo \ $?
N/A 2
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
1
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
f() { false && true ; }; f; echo \ $?
N/A 2
1 0
255 0
255 0
255 0
1
1
1
1
1
1
1
1
1
1 0
255
1
1
1
1
1
1
1
1
1
1 0
1 0
f() { false && false; }; f; echo \ $?
N/A 2
1 0
255 0
255 0
255 0
1
1
1
1
1
1
1
1
1
1 0
255
1
1
1
1
1
1
1
1
1
1 0
1 0
f() { false && true; }; eval f; echo \ $?
N/A 2
1 0
255 0
255 0
255 0
1
1
1
1
1
1
1
1
1
0 0
255
1
1
1
1
1
1
1
1
1
1 0
1 0
f() { false && false; }; eval f; echo \ $?
N/A 2
1 0
255 0
255 0
255 0
1
1
1
1
1
1
1
1
1
0 0
255
1
1
1
1
1
1
1
1
1
1 0
1 0
eval 'false && true; echo foo'; echo \ $?
1
foo 0 0
255 0
255 0
255 0
foo 0 0
foo 0 0
1
1
1
foo 0 0
foo 0 0
foo 0 0
1
foo 0 0
255
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
foo 0 0
1 0
foo 0 0
. ./to_source; echo $? # to_source: "false && true"
1
1 0
255 0
255 0
255 0
1
1
1
1
1
1
1
1
1
0 0
255
1
1
1
1
1
1
1
1
1
1 0
1 0
trap echo\ \$\? 0; (exit 2); exit 1
0 0
0 0
0 0
2 0
2 2
2 2
2 2
2 2
2 2
0 2
2 2
2 2
1 1
2 2
21 0
1 1
0 139
1 1
1 1
2 2
2 2
2 2
1 1
1 1
2 2
2 2
2 2
commandline
V7-sh
$?
SVR2
sh
ultrix
$?
SVR3
sh
sun413
$?
SVR4
sh
sun5.1
$?
SVR4
sh
sun5.10
$?
ksh86a
ep/ix
$?
ksh88d
ep/ix
$?
ksh88g
sun53
$?
ksh88i
sun5.9
$?
ksh93
-k
$?
ksh93
-t
$?
pdksh
-5.2.14
$?
posh-
0.6.17
$?
hist.
ash
$?
bash-
1.05
$?
bash-
1.14.0
$?
bash-
1.14.7
$?
bash-
3.2.48
$?
bash-
3.2.48
--posix
$?
bash-
4.0.35
$?
bash-
4.0.35
--posix
$?
dash-
0.3.4
$?
dash-
0.3.8
$?
dash-
0.5.5.1
$?
dash-
0.5.5.1
-4
$?
zsh-
3.0.8
$?
zsh-
4.3.9
$?
About the table:
Here is a table with results for the tests suggested by D. Korn on the austin-list.
commandline
V7-sh
$?
svr2-sh
ultrix
$?
svr3-sh
sun-413
$?
svr4-sh
sun-5.1
$?
svr4-sh
sun-5.10
$?
ksh86a
ep/ix
$?
ksh88d
ep/ix
$?
ksh88g
sun-53
$?
ksh88i-
sun-5.9
$?
ksh93-k
$?
ksh93-t
$?
pdksh-
5.2.14
$?
posh-
0.6.17
$?
hist.
ash
$?
bash-
1.14.0
$?
bash-
1.14.7
$?
bash-
4.0.35
$?
bash-
4.0.35
--posix
$?
dash-
0.3.4
$?
dash-
0.3.8
$?
dash-
0.5.5.1
$?
dash-
0.5.5.1
-4
$?
zsh-
4.3.9
$?
$SHELL -ec "false;true" && echo "1"
1
1
255
255
255
1
1
1
1
1
1
1
1
1
255
1
1
1
1
1
1
1
1
$SHELL -ec "! true;true" && echo "2"
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
N/A 1
2 0
2 0
2 0
1
1
N/A 2
2 0
2 0
2 0
2 0
1
2 0
2 0
2 0
1
$SHELL -ec "if false;false;then true;fi" || echo "3"
1
0
0
0
3 0
0
0
0
0
0
0
0
0
3 0
0
0
0
0
3 0
0
0
0
0
$SHELL -ec "if false;then echo bar3;elif false;then true;fi" || echo "4"
1
0
0
0
0
0
0
0
0
0
0
0
0
4 0
0
0
0
0
0
0
0
0
0
$SHELL -ec "while false; true;do break;done" || echo "5"
1
0
0
0
0
0
0
0
0
0
0
0
0
5 0
0
0
0
0
5 0
0
0
0
0
$SHELL -ec "until false;do break;done" || echo "6"
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
$SHELL -ec "until ! true ;do break;done" || echo "7"
N/A 1
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
0
0
0
0
0
N/A 0
0
0
0
0
0
0
0
0
0
$SHELL -ec "false || true" || echo "8"
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
$SHELL -ec "false || false" && echo "9"
1
1
255
255
255
1
1
1
1
1
1
1
1
1
255
1
1
1
1
1
1
1
1
$SHELL -ec "false || { false;true;}" && echo "10"
1
1
255
255
255
10 0
1
1
1
1
1
1
1
1
255
1
1
1
1
1
1
1
1
$SHELL -ec "{ false;true;} || { false;true;}" || echo "11"
1
0
0
0
0
0
0
0
0
0
0
0
0
11 0
0
0
0
0
11 0
0
0
0
0
$SHELL -ec "(false);true" && echo "12"
1
1
255
255
255
1
1
1
1
1
1
1
12 0
1
12 0
139
1
1
1
12 0
12 0
1
1
$SHELL -ec "exec 2>/dev/null;true> .;true" || echo "13"
sh-v7-vladov: .: cannot open 1
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
$SHELL -ec "false | true" || echo "14"
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
$SHELL -ec "true | false" && echo "15"
1
1
255
255
255
1
1
1
1
1
1
1
1
1
255
1
1
1
1
1
1
1
1
$SHELL -ec "while true;do false;break;done" && echo "16"
1
1
255
255
255
16 0
1
1
1
1
1
1
1
1
255
1
1
1
1
1
1
1
1
$SHELL -ec "f(){ false;};f" && echo "17"
N/A 2
1
255
255
255
1
1
1
1
1
1
1
1
1
255
1
1
1
1
1
1
1
1
$SHELL -ec "f()(false);f" && echo "18"
N/A 2
1
255
255
255
N/A 2
1
1
1
1
1
1
1
1
N/A 1
N/A 1
1
1
1
1
1
1
1
$SHELL -ec "f(){ false;true;};f" && echo "19"
N/A 2
1
255
255
255
1
1
1
1
1
1
1
1
1
255
1
1
1
1
1
1
1
1
$SHELL -ec "f()(false;true);f" && echo "20"
N/A 2
1
255
255
255
N/A 2
1
1
1
1
1
1
1
1
N/A 1
N/A 1
1
1
1
1
1
1
1
$SHELL -ec "f(){ false;true;};f && true" || echo "21"
N/A 2
0
0
0
0
0
0
0
0
0
0
0
0
21 0
0
0
0
0
21 0
0
0
0
0
$SHELL -ec "f()( false;true);f && true" || echo "22"
N/A 2
0
0
0
0
N/A 0
0
0
0
0
0
0
0
22 0
N/A 0
N/A 0
0
0
22 0
0
0
0
0
$SHELL -ec "f(){ set -e;false;true;};f && true" || echo "23"
N/A 2
0
0
0
23 0
0
0
0
0
0
0
0
0
23 0
0
0
0
0
23 0
0
0
0
0
$SHELL -ec "f()( set -e;false;true);f && true" || echo "24"
N/A 2
0
0
0
24 0
N/A 0
0
0
0
0
0
0
0
24 0
N/A 0
N/A 0
0
0
24 0
0
0
0
0
[ "$($SHELL -ec "{ false;echo foo;} | cat")" = '' ] || echo "25"
N/A 2
N/A 2
N/A 2
N/A 2
N/A 2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[ "$($SHELL -ec "f(){ false;echo foo;}; f | cat")" = '' ] || echo "26"
N/A 2
N/A 2
N/A 2
N/A 2
N/A 2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
[ "$($SHELL -ec "f()(false;echo foo); f | cat")" = '' ] || echo "27"
N/A 2
N/A 2
N/A 2
N/A 2
N/A 2
N/A 0
0
0
0
0
0
0
0
0
N/A 0
N/A 0
0
0
0
0
0
0
0
$SHELL -ec "! true | false" || echo "28"
N/A 1
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
0
0
0
0
0
N/A 0
28 0
28 0
0
0
28 0
0
0
0
0
$SHELL -ec "! true | true;true" && echo "29"
N/A 1
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
N/A 0
29 0
29 0
29 0
1
1
N/A 0
29 0
29 0
29 0
29 0
29 0
29 0
29 0
29 0
1
$SHELL -ec "! { true | true;};true" && echo "30"
N/A 2
N/A 2
N/A 2
N/A 2
N/A 2
N/A 2
N/A 2
N/A 2
30 0
30 0
30 0
1
1
N/A 2
30 0
30 0
30 0
30 0
1
30 0
30 0
30 0
1
$SHELL -ec "true | { false;};true" && echo "31"
1
1
255
255
255
1
31 0
1
1
1
1
1
1
1
31 0
139
1
1
1
1
1
1
1
commandline
V7-sh
$?
svr2-sh
ultrix
$?
svr3-sh
sun-413
$?
svr4-sh
sun-5.1
$?
svr4-sh
sun-5.10
$?
ksh86a
ep/ix
$?
ksh88d
ep/ix
$?
ksh88g
sun-53
$?
ksh88i-
sun-5.9
$?
ksh93-k
$?
ksh93-t
$?
pdksh-
5.2.14
$?
posh-
0.6.17
$?
hist.
ash
$?
bash-
1.14.0
$?
bash-
1.14.7
$?
bash-
4.0.35
$?
bash-
4.0.35
--posix
$?
dash-
0.3.4
$?
dash-
0.3.8
$?
dash-
0.5.5.1
$?
dash-
0.5.5.1
-4
$?
zsh-
4.3.9
$?
Comments to
<mascheck@in-ulm.de>
<http://www.in-ulm.de/~mascheck/various/set-e/>