Shell 获取“中的返回值”;sh-e“;
我正在用Shell 获取“中的返回值”;sh-e“;,shell,sh,Shell,Sh,我正在用#编写一个shell脚本/bin/sh作为第一行,以便脚本在出现第一个错误时退出。文件中有几行的格式为command | | true,因此如果命令失败,脚本不会立即退出。但是,我仍然想知道该命令的退出代码。如何获得退出代码而不必使用set+e临时禁用该行为?您的问题似乎暗示了set-e 假设设置-e: 您可以使用command | | | exitCode=$?而不是command | | | true。脚本将继续,并且命令的退出状态将在exitCode中捕获 $?是一个内部变量,用于
#编写一个shell脚本/bin/sh
作为第一行,以便脚本在出现第一个错误时退出。文件中有几行的格式为command | | true
,因此如果命令失败,脚本不会立即退出。但是,我仍然想知道该命令的退出代码。如何获得退出代码而不必使用set+e
临时禁用该行为?您的问题似乎暗示了set-e
假设设置-e
:
您可以使用command | | | exitCode=$?
而不是command | | | true
。脚本将继续,并且命令的退出状态将在exitCode
中捕获
$?
是一个内部变量,用于保存最后一个命令的退出代码
由于|
如果命令
成功,则短路,因此在测试之间设置exitCode=0
,或者改用:命令和&exitCode=0 | | exitCode=$?
但是,您更愿意完全避免使用set-e
样式的脚本,而是为脚本中的每个命令添加显式错误处理。如果您想知道命令的状态,则可能会根据其值采取不同的操作。在这种情况下,您的代码应该如下所示:
if command; then
# do something when command succeeds
else
# do something when command fails
fi
在这种情况下,您不需要做任何特殊的事情,因为当命令失败时,shell不会中止。
set-e
会给您带来任何问题的唯一原因是,如果您将代码编写为:
command
if test $? = 1; ...
所以不要这样做。+1,但可能最好编写命令&&exitCode=0 | | exitCode=$?
以便在exitCode
中捕获退出状态,即使命令成功。@KeithThompson:因为如果命令
返回非零退出代码,那么它将中止。很少有特定情况下,set-e
忽略命令的退出代码,并且没有一个适用于命令;exitCode=$?
.Bash!=sh
,但您的问题已被标记。请参阅,了解不使用-e
的原因。脚本只是一系列命令,其中两个命令给出了扭曲的退出代码,因此我不想在每个命令之后添加错误处理,以适应这两个命令。我很确定bash和sh在这方面是一样的。