1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
# test ignoring effects of set -e on commands whose return status is being
# inverted
echo test invert
! ( set -e; false; echo reached subshell; )
set +e
! { set -e; false; echo reached group; }
set +e
! { set -e ; false ; echo reached async group; } &
wait
set +e
set -e
exec 3>&2
exec 2>/dev/null
! time { set -e ; false ; echo reached timed group; }
exec 2>&3
set +e
set -e
! false
echo reached simple
set +e
! if set -e; false ; echo reached if test; true; then
set -e
false
echo reached if body
fi
set +e
! while set -e ; false; echo reached while test; true; do
set -e
false
echo reached while body
break
done
set +e
! until set -e ; false; echo reached until test; false; do
set -e
false
echo reached until body
break
done
set +e
func()
{
set -e; false; echo reached func;
}
! func
set +e
! for f in 1 2 3; do
set -e
false
echo reached for
break
done
set +e
! for (( f=0; f < 3; f++ )); do
set -e
false
echo reached arith for
break
done
set +e
! select f in a b c
do
set -e
false
echo reached select
break
done <<<"a"
set +e
! case 1 in
1) set -e
false
echo reached case ;;
*) echo bad case match;;
esac
set +e
set -e
! (( 0 ))
echo reached arith
set +e
set -e
! [[ -n '' ]]
echo reached cond
set +e
! coproc C { set -e; false; echo reached coproc body; sleep 0.5; exit 0; }
read -u ${C[0]}
echo $REPLY
set +e
! echo pipeline | { set -e ; false; echo reached pipeline element invert; } | cat -
echo pipeline | { set -e ; false; echo reached pipeline element non-invert; } | cat -
set +e
! { true && { set -e ; false; echo reached AND-AND body; }; }
set +e
! { false || { set -e ; false; echo reached OR-OR body; }; }
set +e
true && ! { set -e ; false ; echo reached AND-AND group; }
set +e
false || ! { set -e ; false ; echo reached OR-OR group; }
set +e
# precedence here
! false && { set -e ; false ; echo reached inverted AND-AND group; }
set +e
! true || { set -e ; false ; echo reached inverted OR-OR group; }
set +e
# NOTREACHED
echo done
|