我在 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
来检索脚本各部分的状态代码。
更多关于: