在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