111 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
if : ; then
 | 
						|
	set -e
 | 
						|
	N=95
 | 
						|
	while :; do
 | 
						|
		# expr returns 1 if expression is null or 0
 | 
						|
		set +e
 | 
						|
		N_MOD_100=`expr $N % 100`
 | 
						|
		set -e
 | 
						|
		echo $N_MOD_100
 | 
						|
		N=`expr $N + 1`
 | 
						|
		if [ $N -eq 110 ]; then
 | 
						|
			break
 | 
						|
		fi
 | 
						|
	done
 | 
						|
	set +e
 | 
						|
fi
 | 
						|
 | 
						|
(
 | 
						|
set -e
 | 
						|
false
 | 
						|
echo bad
 | 
						|
)
 | 
						|
echo $?
 | 
						|
 | 
						|
x=$(
 | 
						|
set -e
 | 
						|
false
 | 
						|
echo bad
 | 
						|
)
 | 
						|
echo $? $x
 | 
						|
 | 
						|
# command subst should not inherit -e
 | 
						|
set -e
 | 
						|
echo $(false; echo ok)
 | 
						|
 | 
						|
if set +e
 | 
						|
then
 | 
						|
	false
 | 
						|
fi
 | 
						|
echo hi
 | 
						|
 | 
						|
set -e
 | 
						|
 | 
						|
# a failing command in the compound list following a while, until, or
 | 
						|
# if should not cause the shell to exit
 | 
						|
 | 
						|
while false; do
 | 
						|
	echo hi
 | 
						|
done
 | 
						|
echo while succeeded
 | 
						|
 | 
						|
x=1
 | 
						|
until (( x == 4 )); do
 | 
						|
	x=4
 | 
						|
done
 | 
						|
echo until succeeded: $x
 | 
						|
 | 
						|
if false; then
 | 
						|
	echo oops
 | 
						|
fi
 | 
						|
echo if succeeded
 | 
						|
 | 
						|
# failing commands that are part of an AND or OR list should not
 | 
						|
# cause the shell to exit
 | 
						|
false && echo AND list failed
 | 
						|
echo AND list succeeded
 | 
						|
 | 
						|
false || echo OR list succeeded
 | 
						|
 | 
						|
! false
 | 
						|
echo ! succeeded
 | 
						|
 | 
						|
# make sure eval preserves the state of the -e flag and `!' reserved word
 | 
						|
set -e
 | 
						|
if eval false; then
 | 
						|
	echo oops
 | 
						|
fi
 | 
						|
echo eval succeeded
 | 
						|
 | 
						|
! eval false
 | 
						|
echo ! eval succeeded -- 1
 | 
						|
 | 
						|
! eval '(exit 5)'
 | 
						|
echo ! eval succeeded -- 2
 | 
						|
 | 
						|
set -e
 | 
						|
until builtin false; do echo a; break; done
 | 
						|
echo $?
 | 
						|
 | 
						|
until eval false; do echo b; break; done
 | 
						|
echo $?
 | 
						|
 | 
						|
: ${TMPDIR:=/tmp}
 | 
						|
FN=$TMPDIR/set-e-$$
 | 
						|
cat > $FN << EOF
 | 
						|
false
 | 
						|
echo after 1
 | 
						|
false
 | 
						|
EOF
 | 
						|
 | 
						|
set -e
 | 
						|
until . $FN; do echo a; break; done
 | 
						|
echo $?
 | 
						|
 | 
						|
rm -f $FN
 | 
						|
 | 
						|
set +e
 | 
						|
 | 
						|
${THIS_SH} ./set-e1.sub
 | 
						|
${THIS_SH} ./set-e2.sub
 | 
						|
${THIS_SH} ./set-e3.sub
 |