init version.
[bush.git] / tests / 6.cmd / set-e / set-e.tests
blob3e0d66981d528ac262e1ef308d398406589a05f2
1 #   This program is free software: you can redistribute it and/or modify
2 #   it under the terms of the GNU General Public License as published by
3 #   the Free Software Foundation, either version 3 of the License, or
4 #   (at your option) any later version.
6 #   This program is distributed in the hope that it will be useful,
7 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
8 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 #   GNU General Public License for more details.
11 #   You should have received a copy of the GNU General Public License
12 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
14 if : ; then
15         set -e
16         N=95
17         while :; do
18                 # expr returns 1 if expression is null or 0
19                 set +e
20                 N_MOD_100=`expr $N % 100`
21                 set -e
22                 echo $N_MOD_100
23                 N=`expr $N + 1`
24                 if [ $N -eq 110 ]; then
25                         break
26                 fi
27         done
28         set +e
32 set -e
33 false
34 echo bad
36 echo $?
38 x=$(
39 set -e
40 false
41 echo bad
43 echo $? $x
45 # command subst should not inherit -e
46 set -e
47 echo $(false; echo ok)
49 if set +e
50 then
51         false
53 echo hi
55 set -e
57 # a failing command in the compound list following a while, until, or
58 # if should not cause the shell to exit
60 while false; do
61         echo hi
62 done
63 echo while succeeded
65 x=1
66 until (( x == 4 )); do
67         x=4
68 done
69 echo until succeeded: $x
71 if false; then
72         echo oops
74 echo if succeeded
76 # failing commands that are part of an AND or OR list should not
77 # cause the shell to exit
78 false && echo AND list failed
79 echo AND list succeeded
81 false || echo OR list succeeded
83 ! false
84 echo ! succeeded
86 # make sure eval preserves the state of the -e flag and `!' reserved word
87 set -e
88 if eval false; then
89         echo oops
91 echo eval succeeded
93 ! eval false
94 echo ! eval succeeded -- 1
96 ! eval '(exit 5)'
97 echo ! eval succeeded -- 2
99 set -e
100 until builtin false; do echo a; break; done
101 echo $?
103 until eval false; do echo b; break; done
104 echo $?
106 : ${TMPDIR:=/tmp}
107 FN=$TMPDIR/set-e-$$
108 cat > $FN << EOF
109 false
110 echo after 1
111 false
114 set -e
115 until . $FN; do echo a; break; done
116 echo $?
118 rm -f $FN
120 set +e
122 ${THIS_SH} ./set-e1.sub
123 ${THIS_SH} ./set-e2.sub
124 ${THIS_SH} ./set-e3.sub