Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 获取“中的返回值”;sh-e“;_Shell_Sh - Fatal编程技术网

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在这方面是一样的。