我刚刚遇到一些关于stdout和stderr的奇怪事情!
这非常有效:
$ ( { { echo "This is stdout"; echo "This is stderr" 1>&2; } | sed "s/^/stdout captured - /"; } 3>&2 2>&1 1>&3 ) | sed "s/^/stderr captured - /"
stderr captured - This is stderr
stdout captured - This is stdout
但是,请看:
$ sudo postfix status >/dev/null
postfix/postfix-script: the Postfix mail system is not running
$ sudo postfix status 2>/dev/null
$
我认为,屏幕上的信息绝对是STDERR,但是:
$ ( { { sudo postfix status; } | sed "s/^/stdout captured - /"; } 3>&2 2>&1 1>&3 ) | sed "s/^/stderr captured - /"
$
没有捕获任何东西。我只是发出以下命令而不再获取任何内容:
$ `sudo postfix status 2>/tmp/somelog` && cat /tmp/somelog
$
我不知道bash
ps:我在MAC OSX 10.11.6
,终端。
答案 0 :(得分:1)
我认为这与postfix
命令有关,当它是管道的一部分时实际上表现不同。
我在我的系统上试过这个:
sudo postfix status 2>log
并且log
变空了。同样的事情:
postfix status 2>log
当输出没有到达终端时,似乎postfix
会抑制此输出。