OILS / spec / fatal-errors.test.sh View on Github | oils.pub

187 lines, 60 significant
1## compare_shells: dash bash mksh zsh
2
3# Some shell errors are unrecoverable! Like divide by zero (except in bash.
4#
5# Any others?
6
7
8#### Unrecoverable: divide by zero in redirect word
9
10$SH -c '
11echo hi > file$(( 42 / 0 )) in
12echo inside=$?
13'
14echo outside=$?
15
16## STDOUT:
17outside=1
18## END
19
20## OK dash/ash STDOUT:
21outside=2
22## END
23
24# bash makes the command fail
25## OK bash STDOUT:
26inside=1
27outside=0
28## END:
29
30
31#### Unrecoverable: divide by zero in conditional word
32
33$SH -c '
34if test foo$(( 42 / 0 )) = foo; then
35 echo true
36else
37 echo false
38fi
39echo inside=$?
40'
41echo outside=$?
42
43echo ---
44
45$SH -c '
46if test foo$(( 42 / 0 )) = foo; then
47 echo true
48fi
49echo inside=$?
50'
51echo outside=$?
52
53## STDOUT:
54outside=1
55---
56outside=1
57## END
58
59## OK dash/ash STDOUT:
60outside=2
61---
62outside=2
63## END
64
65# bash makes the command fail
66## OK bash STDOUT:
67inside=1
68outside=0
69---
70inside=1
71outside=0
72## END:
73
74# weird difference in zsh!
75
76## BUG zsh STDOUT:
77outside=1
78---
79outside=0
80## END
81
82
83#### Unrecoverable: divide by zero in case
84
85$SH -c '
86case $(( 42 / 0 )) in
87 (*) echo hi ;;
88esac
89echo inside=$?
90'
91echo outside=$?
92
93echo ---
94
95$SH -c '
96case foo in
97 ( $(( 42 / 0 )) )
98 echo hi
99 ;;
100esac
101echo inside=$?
102'
103echo outside=$?
104
105## STDOUT:
106outside=1
107---
108outside=1
109## END
110
111## OK dash/ash STDOUT:
112outside=2
113---
114outside=2
115## END
116
117## OK bash STDOUT:
118inside=1
119outside=0
120---
121inside=1
122outside=0
123## END:
124
125## BUG zsh STDOUT:
126outside=0
127---
128outside=0
129## END
130
131
132#### Unrecoverable: ${undef?message}
133
134$SH -c '
135echo ${undef?message}
136echo inside=$?
137'
138echo outside=$?
139
140$SH -c '
141case ${undef?message} in
142 (*) echo hi ;;
143esac
144echo inside=$?
145'
146echo outside=$?
147
148## STDOUT:
149outside=1
150outside=1
151## END
152## OK dash STDOUT:
153outside=2
154outside=2
155## END
156## OK bash STDOUT:
157outside=127
158outside=127
159## END
160
161#### ${undef} with nounset
162
163$SH -c '
164set -o nounset
165case ${undef} in
166 (*) echo hi ;;
167esac
168echo inside=$?
169'
170echo outside=$?
171
172## STDOUT:
173outside=1
174## END
175
176## OK dash STDOUT:
177outside=2
178## END
179
180## OK bash STDOUT:
181outside=127
182## END
183
184## BUG zsh STDOUT:
185outside=0
186## END
187