stderr 只能在屏幕上打印,不能通过管道传输
stderr can only be printed on screen but cannot be piped
我刚刚遇到了关于 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
,终端。
我认为这与 postfix
命令作为管道的一部分时实际表现不同有关。
我在我的系统上试过了:
sudo postfix status 2>log
而 log
结果是空的。与 :
相同
postfix status 2>log
似乎 postfix
在其输出不进入终端时抑制此输出。
我刚刚遇到了关于 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
,终端。
我认为这与 postfix
命令作为管道的一部分时实际表现不同有关。
我在我的系统上试过了:
sudo postfix status 2>log
而 log
结果是空的。与 :
postfix status 2>log
似乎 postfix
在其输出不进入终端时抑制此输出。