获取“sh -e”中的返回值

时间:2012-07-20 18:09:59

标签: shell sh

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

2 个答案:

答案 0 :(得分:5)

您的问题似乎暗示set -e

假设set -e

您可以使用command || true代替command || exitCode=$?。该脚本将继续,并在command中捕获exitCode的退出状态。

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

如果||成功command短路,请在测试之间设置exitCode=0或改为使用:command && exitCode=0 || exitCode=$?

但更喜欢完全避免使用set -e样式脚本,而是在脚本中为每个命令添加显式错误处理。

答案 1 :(得分:2)

如果您想知道命令的状态,那么可能您会根据其值采取不同的操作。在这种情况下,您的代码应该类似于:

if command; then
    # do something when command succeeds
else
    # do something when command fails
fi

在这种情况下,您不需要执行任何特殊操作,因为命令失败时shell不会中止。 set -e给您带来任何问题的唯一原因是您将代码编写为:

command
if test $? = 1; ...

所以不要这样做。