【发布时间】:2019-10-11 08:20:51
【问题描述】:
我遇到了一些有趣的事情。正如标题所说,我正在尝试将标准错误重定向到标准输出并抑制/抛出标准输出。 在您将此帖子标记为重复之前(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)"
但我很好奇为什么初始方法不起作用。
谢谢。
【问题讨论】:
-
你必须使用
2>&1 >/dev/null