Linux 当`set-e时,如何选择性地处理非零退出代码`

Linux 当`set-e时,如何选择性地处理非零退出代码`,linux,bash,Linux,Bash,在脚本中,我设置了 set -e 然后,我在所述脚本中的if语句中运行命令: if adb -s emulator-5554 uninstall my.package ; then echo "handle emulator command return code here ... " fi 我想获取命令emulator-5554 uninstall my.package的返回码,并根据其值处理返回码;我无法执行此操作,因为该命令嵌入在if语句中 处于if语句中不会影响获取返回代码

在脚本中,我设置了

set -e
然后,我在所述脚本中的if语句中运行命令:

if adb -s emulator-5554 uninstall my.package ; then
    echo "handle emulator command return code here ... "
fi 
我想获取命令emulator-5554 uninstall my.package的返回码,并根据其值处理返回码;我无法执行此操作,因为该命令嵌入在if语句中

处于if语句中不会影响获取返回代码的方式,set-e不适用于条件命令:

if adb -s emulator-5554 uninstall my.package ; then
    echo "The command succeeded, yay!"
else
    code="$?"
    echo "The command failed with exit code $code"
fi 
处于if语句中不会影响获取返回代码的方式,并且set-e不适用于条件命令:

if adb -s emulator-5554 uninstall my.package ; then
    echo "The command succeeded, yay!"
else
    code="$?"
    echo "The command failed with exit code $code"
fi 

另一种流行的助记符是&&ret=0 | | ret=$?或类似的。因为赋值ret=$?返回零退出状态,表达式以零状态退出。另一种流行的记忆法是ret=0;| |ret=$


一定不要把它写成| | ret=$?&&ret=$

另一种流行的记忆法是&&ret=0 | | ret=$?或类似的。因为赋值ret=$?返回零退出状态,表达式以零状态退出。另一种流行的记忆法是ret=0;| |ret=$


一定不要把它写成| | ret=$?&&ret=$

回顾中的练习通常是一种很好的利用时间的方法,以设定对不良副作用倾向的预期。是另一个有用的资源,显示了启用set-e后不同的shell和同一shell的不同版本如何表现出不同的行为;我认为启用该标志,而不是编写显式错误处理代码,会严重损害脚本的可预测性和可移植性。嵌入if语句可以更轻松地处理返回代码,尤其是启用了set-e时!如果更精确地启用了set-e,如果启用了errexit选项,并且您的命令不在If语句和其他一些警告中,那么您将无法处理非零返回代码,因为脚本将终止。因为它在if语句中,所以errexit是不相关的,if语句会为您过滤其中一个返回代码。在中查看练习通常是一种很好的时间利用方式,可以围绕set-es不必要的副作用倾向设定期望值。是另一个有用的资源,显示了启用set-e后不同的shell和同一shell的不同版本如何表现出不同的行为;我认为启用该标志,而不是编写显式错误处理代码,会严重损害脚本的可预测性和可移植性。嵌入if语句可以更轻松地处理返回代码,尤其是启用了set-e时!如果更精确地启用了set-e,如果启用了errexit选项,并且您的命令不在If语句和其他一些警告中,那么您将无法处理非零返回代码,因为脚本将终止。因为它位于if语句中,所以errexit是不相关的,if语句会为您过滤其中一个返回代码。