?() { return ${1:-$?} }
and then:
$ \? 2 $ echo $? 2
You also want to test $?:
$ \? 2 $ \? && echo yes $? || echo no $? no 2
which is simpler than
$ test $? = 0 && echo yes $? || echo no $? no 1which also replaces $? with the result of the test.
But how about this extended form that allows you to run a command while preserving (or forcing) the return code?
?() { set -- $? "$@" if test "$#" -le 2 -a -z "${2//[0-9]}" then return ${2:-$1} else "${@:2}" return $1 fi }
e.g.:
$ tar -xzf "$tar" $ \? rm -fr "$tar"
which leaves $? set to the result of the tar extraction.
Of course a command which is purely numeric with no arguments is mistaken for an exit code.
Note the use of: set -- $? "$@" as function arguments are which is the only lexical scoped variables in bash.
No comments:
Post a Comment