在shell中,如何测试从$记录的return代码?
In shell, how do I test a return code recorded from $?
有点愚蠢的问题,但是...
如果命令很容易失败,我可以退出:
command || exit $?
如果我想在命令和退出之间插入一些东西,我可以测试 return 代码与 0,或者只是从子 shell 退出:
command ; rc=$?
echo That command returned $rc
[ $rc -eq 0 ] || exit $rc
# or
( exit $rc ) || exit $rc
但我不喜欢 test vs 0,因为它使 0=true 显式化。
虽然我喜欢 ( exit $rc ) 因为它避免了明确的 0,但子 shell 似乎很重量级并且使用 exit 两次似乎是多余的。
有更好的选择吗?
不是我的想法,但对我来说足够接近,因为我通常只关心失败:
$ bash
bash-3.2$ false || exit $? $( echo worbly boo $? > /dev/tty )
worbly boo 1
exit
它方便地缩短了 $( )
,所以除了在错误情况下没有子 shell。
它还相当优雅地处理 $( )
中的故障:
bash-3.2$ false || exit $? $( ( foo ; echo $? ) > /dev/tty )
bash: foo: command not found
127
exit
定义一个函数来处理失败情况:
fail() {
echo failed with code ;
exit ;
}
true || fail $? # does nothing
false || fail $? # outputs failed... and exits
有点愚蠢的问题,但是...
如果命令很容易失败,我可以退出:
command || exit $?
如果我想在命令和退出之间插入一些东西,我可以测试 return 代码与 0,或者只是从子 shell 退出:
command ; rc=$?
echo That command returned $rc
[ $rc -eq 0 ] || exit $rc
# or
( exit $rc ) || exit $rc
但我不喜欢 test vs 0,因为它使 0=true 显式化。
虽然我喜欢 ( exit $rc ) 因为它避免了明确的 0,但子 shell 似乎很重量级并且使用 exit 两次似乎是多余的。
有更好的选择吗?
不是我的想法,但对我来说足够接近,因为我通常只关心失败:
$ bash
bash-3.2$ false || exit $? $( echo worbly boo $? > /dev/tty )
worbly boo 1
exit
它方便地缩短了 $( )
,所以除了在错误情况下没有子 shell。
它还相当优雅地处理 $( )
中的故障:
bash-3.2$ false || exit $? $( ( foo ; echo $? ) > /dev/tty )
bash: foo: command not found
127
exit
定义一个函数来处理失败情况:
fail() {
echo failed with code ;
exit ;
}
true || fail $? # does nothing
false || fail $? # outputs failed... and exits