如何从子表达式中的命令中获取退出代码

时间:2015-05-26 00:17:19

标签: bash

我有一个像这样的Bash脚本片段:

local SOME_VAR=$( first_command | second_command )
SECOND_COMMAND_EXIT_CODE=$?

但即使SECOND_COMMAND_EXIT_CODE失败,second_command也始终为零。值得注意的是second_command输出多行文字。

有没有办法捕获变量中second_command的所有输出,并在另一个变量中捕获其退出代码?

1 个答案:

答案 0 :(得分:1)

观察:

foo=$(echo "hello world" | false); foo_exit=$?
echo "$foo_exit"

...正如此问题所声称的那样产生1,而不是0。因此,问题的前提是错误的;如果second_command在没有退出状态的情况下失败,那么这是一个与其作者/维护者有关的问题。

评论中的每一个澄清 - local是一个内置命令,与其他内置命令一样,修改$?。因此,有必要分离命令以避免修改此值:

local foo
foo=$(echo "hello world" | false); foo_exit=$?
echo "$foo_exit"