3

我正在编写一个 shell 脚本,#!/bin/sh第一行是脚本在第一个错误时退出。文件中有几行的形式是command || true这样,如果命令失败,脚本就不会在那里退出。但是,我仍然想知道该命令的退出代码。我如何获得退出代码而不必使用set +e暂时禁用该行为?

4

2 回答 2

6

你的问题似乎暗示set -e

假设set -e

而不是command || true你可以使用command || exitCode=$?. 脚本将继续执行,并在command中捕获的退出状态exitCode

$?是一个内部变量,用于保存最后一个命令的退出代码。

如果成功||则短路,请在测试之间设置或改为使用:。commandexitCode=0command && 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 回答