如何将 'hub' 命令的多行输出存储在变量中?

How to store multiline outputs from 'hub' command in a variable?

如果我使用 hub 命令在 GitHub 上创建一个 pull request 并且我得到一个错误然后它被输出为四行:

hub pull-request -p -b MyOrg:main -h Test_Branch -m "testing" 

输出:

Everything up-to-date
Branch 'Test_Branch' set up to track remote branch 'Test_Branch' from 'MyOrg'.
Error creating pull request: Unprocessable Entity (HTTP 422)
A pull request already exists for MyOrg:Test_Branch.

现在,如果我尝试以这种方式存储输出:

output=$(hub pull-request -p -b MyOrg:main -h Test_Branch -m "testing")

然后奇怪的是只有第二行存储在 output.

如果我打印它,我只会看到第二行:

echo $output

结果:

Branch 'Test_Branch' set up to track remote branch 'Test_Branch' from 'MyOrg'.

我的总体目标是捕获输出,而不是将其打印给用户。我只想向他们展示一条简单的错误消息(而不是四行输出)。理想情况下,我只想在 Error creating pull request 上执行 grep 并基于此打印一条专用错误消息。

谁能告诉我该怎么做?谢谢。

其他行可能打印到 STDERR。使用 command substitution 时,只有 STDOUT 被捕获到 vraiable 中。

要获得两者,您需要通过在命令中附加 2>&1 将 STDERR 重定向到 STDOUT:

output=$( your_command 2>&1 )