postlog命令终端有输出但无法通过管道传递数据的问题求助
问题
执行命令/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是Postfix自带的日志工具,它默认不会把内容输出到标准输出或标准错误流,而是直接将日志发送给系统日志服务(比如syslog或者journald)。你在终端看到的输出,其实是终端从系统日志服务那边获取并显示的,并非postlog直接输出到终端的数据流。所以不管怎么重定向、用管道,cat -n都接不到任何数据,自然没法添加行号。
解决办法
要让postlog的输出能被管道处理,得用它的-p参数强制把内容输出到标准错误流,这样就能通过重定向或管道捕获内容了:
/usr/sbin/postlog -p hello 2>&1 | cat -n
或者用|&同时捕获标准输出和标准错误:
/usr/sbin/postlog -p hello |& cat -n
执行后就能看到带行号的输出了。
内容的提问来源于stack exchange,提问作者kingkong
相关产品推荐
相关产品推荐

