【问题标题】:How to store multiline outputs from 'hub' command in a variable?如何将“集线器”命令的多行输出存储在变量中?
【发布时间】:2021-12-26 02:31:33
【问题描述】:

如果我在 GitHub 上使用hub 命令创建拉取请求并收到错误消息,则会输出四行:

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?要同时保留 STDOUT 和 STDERR,请尝试在末尾添加 2>&1output=$(hub ..."testing" 2>&1)
  • @mivk 解决了这个问题!非常感谢!如果您将其写为答案,我会将其标记为答案。

标签: bash github hub


【解决方案1】:

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

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

output=$( your_command 2>&1 )

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2011-08-20
    • 2021-11-22
    • 2012-07-19
    相关资源
    最近更新 更多