# builtins with exit status inverted ( true ) echo $? ( ! true ) echo $? ( false ) echo $? ( ! false ) echo $? # inverting shouldn't affect exit (exit 42) echo $? ( ! exit 42 ) echo $? # commands requiring an exec with exit status inverted -- broken in bash-2.04 ( ls > /dev/null 2>&1 ) echo $? ( ! ls > /dev/null 2>&1 ) echo $? touch /tmp/notwrite chmod 400 /tmp/notwrite # make sure redirection failures in commands whose exit status is inverted # are handled correctly ( ls > /tmp/notwrite ) 2>/dev/null echo $? ( ! ls > /tmp/notwrite ) 2>/dev/null echo $? # now add exit traps, true and false for commands with and without exit # status inversion (trap 'false' 0 ; ! ls > /tmp/notwrite ) 2>/dev/null echo $? (trap 'false' 0 ; ls > /tmp/notwrite ) 2>/dev/null echo $? (trap 'true' 0 ; ! ls > /tmp/notwrite ) 2>/dev/null echo $? (trap 'true' 0 ; ls > /tmp/notwrite ) 2>/dev/null echo $? rm -f /tmp/notwrite