Command
/usr/sbin/postlog hello
显示终端中的输出。我将结果通过管道传输到 cat -n
并想添加行号,但它根本不起作用,即使我同时通过管道传输 stdout 和 stderr。我不知道为什么会这样。
root 18:03:27# /usr/sbin/postlog hello
postfix/postlog: hello
root 18:03:38# /usr/sbin/postlog hello | cat -n
postfix/postlog: hello
root 18:03:49# /usr/sbin/postlog hello |& cat -n
root 18:03:56# /usr/sbin/postlog hello 2>&1 | cat -n
我可以重现问题并尝试一下。根据手册页,输出被发送到 postlog-demon,也发送到 stderr,但只有如果 stderr 连接到终端。这似乎是一个奇怪的设计决定:如果您将 stderr 重定向到管道或文件,postlog 不会写入 stderr,如果您不重定向它,您会看到输出,但无法捕获它。我不明白,为什么它是这样设计的,但建议你写一个简单的封面脚本,它将它的论点与标准输出相呼应and将它提供给日志记录恶魔,即像
这样的东西脚本mypostlog
#!/bin/bash
/usr/sbin/postlog "$@" 2>/dev/null
echo "$@"
然后您可以将此脚本用作
mypostlog|cat -n