Shell 确实输出但不能管道输出数据

问题描述 投票:0回答:1

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
bash shell pipe stdout
1个回答
0
投票

我可以重现问题并尝试一下。根据手册页,输出被发送到 postlog-demon,也发送到 stderr,但只有如果 stderr 连接到终端。这似乎是一个奇怪的设计决定:如果您将 stderr 重定向到管道或文件,postlog 不会写入 stderr,如果您不重定向它,您会看到输出,但无法捕获它。我不明白,为什么它是这样设计的,但建议你写一个简单的封面脚本,它将它的论点与标准输出相呼应and将它提供给日志记录恶魔,即像

这样的东西

脚本mypostlog

#!/bin/bash
/usr/sbin/postlog "$@" 2>/dev/null
echo "$@"

然后您可以将此脚本用作

mypostlog|cat -n
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.