使用管道时检索状态代码

使用管道时检索状态代码

我在 Bash 脚本中运行以下命令:

cd SomeDir && (sh -c "$CMD_STR") 2>&1 | some_filtering | sed -u -e ....

即我在 SomeDir 中运行 CMD_STR(实际上 CMD_STR 是“make”或“make target”),对 CMD_STR 的输出进行一些过滤,然后用“sed”替换一些符号。

我需要检索 CMD_STR 的状态代码,以防 CMD_STR 无法从我的脚本返回它。我该怎么做?

答案1

解决方案是在运行命令之前设置“pipefail”选项。

http://www.gnu.org/software/bash/manual/bashref.html

如果启用了 pipefail,则管道的返回状态是最后一个(最右边)以非零状态退出的命令的值,如果所有命令都成功退出,则返回状态为零。

现在我的脚本如下所示:

set -o pipefail
cd SomeDir && (sh -c "$CMD_STR") 2>&1 | some_filtering | sed -u -e ....
exit $?

答案2

要检查 bash shell 中的最后退出状态代码,可以使用:

echo $?

您还说过您在脚本中使用该命令,因此,要检索状态代码,您可以按如下方式运行该脚本:

sh -x /path/to/script

或者

bash -x /path/to/script

其他选项是使用脚本中的set -x命令set +x来检索脚本各部分的状态代码。

更多关于:

相关内容