我正在编写一个 shell 脚本,#!/bin/sh
第一行是脚本在第一个错误时退出。文件中有几行的形式是command || true
这样,如果命令失败,脚本就不会在那里退出。但是,我仍然想知道该命令的退出代码。我如何获得退出代码而不必使用set +e
暂时禁用该行为?
问问题
1413 次
2 回答
6
你的问题似乎暗示set -e
。
假设set -e
:
而不是command || true
你可以使用command || exitCode=$?
. 脚本将继续执行,并在command
中捕获的退出状态exitCode
。
$?
是一个内部变量,用于保存最后一个命令的退出代码。
如果成功||
则短路,请在测试之间设置或改为使用:。command
exitCode=0
command && exitCode=0 || exitCode=$?
但更愿意set -e
完全避免样式脚本,而是为脚本中的每个命令添加显式错误处理。
于 2012-07-20T18:27:03.053 回答
3
如果您想知道命令的状态,那么您可能会根据其值采取不同的操作。在这种情况下,您的代码应类似于:
if command; then
# do something when command succeeds
else
# do something when command fails
fi
在这种情况下,您不需要做任何特别的事情,因为当命令失败时,shell 不会中止。会给您带来任何问题的唯一原因set -e
是您将代码编写为:
command
if test $? = 1; ...
所以不要那样做。
于 2012-07-21T06:03:19.763 回答