运行git命令时将stderr重定向到stdout并将stdout重定向到/ dev / null

时间:2019-05-24 18:02:41

标签: linux bash git io

我遇到了一些有趣的事情。如标题所示,我正在尝试将stderr重定向到stdout并禁止/抛出stdout。 在您将此帖子标记为重复帖子Shell: redirect stdout to /dev/null and stderr to stdoutHow to pipe stderr, and not stdout?IO Redirection - Swapping stdout and stderr)之前,请给我机会。

所以,我想要这样的东西:

#!/bin/bash

temp_func () {
    GLOBALVAR="$($1 "$2" 2>&1 >/dev/null)"
}

temp_func "echo" "hello world"
echo "should be empty: $GLOBALVAR"

temp_func "ecsdfho" "hello world"
echo "should show err: $GLOBALVAR"

上述工作正常。很酷。

如果我现在改为:

PUSH_RESULT="$(git push "$REMOTE" "$NEW_TAG" 2>&1 >/dev/null)"

$PUSH_RESULT最终在发生错误时填充错误(这是很大的错误),但是在成功推送后最终还会包含git输出。为什么!?

注意: 我可以通过执行以下操作来绕过此问题:

PUSH_RESULT="$(git push -q "$REMOTE" "$NEW_TAG" 2>&1)"

但很好奇为什么初始方法不起作用。

谢谢。

1 个答案:

答案 0 :(得分:1)

  

在成功推送后最终包含git输出。为什么!?

因为这些消息也被写入stderr。它不仅用于错误,而且还用于不视为最终产品的进度和状态消息。