我有一个像这样的Bash脚本片段:
local SOME_VAR=$( first_command | second_command )
SECOND_COMMAND_EXIT_CODE=$?
但即使SECOND_COMMAND_EXIT_CODE
失败,second_command
也始终为零。值得注意的是second_command
输出多行文字。
有没有办法捕获变量中second_command
的所有输出,并在另一个变量中捕获其退出代码?
答案 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"