我遇到了一些有趣的事情。如标题所示,我正在尝试将stderr重定向到stdout并禁止/抛出stdout。 在您将此帖子标记为重复帖子(Shell: redirect stdout to /dev/null and stderr to stdout,How 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)"
但很好奇为什么初始方法不起作用。
谢谢。
答案 0 :(得分:1)
在成功推送后最终包含git输出。为什么!?
因为这些消息也被写入stderr。它不仅用于错误,而且还用于不视为最终产品的进度和状态消息。