stderr 未重定向到 stdout

stderr 未重定向到 stdout

我运行一个TACACS+服务器它将调试信息发送到stderr.由于我想从此调试信息中 grep 特定数据,因此我重定向stderrstdout: tac_plus -f /usr/local/etc/tac_plus.cfg 2>&1。然而,看起来它实际上并没有转到stdout,因为如果我执行tac_plus -f /usr/local/etc/tac_plus.cfg 2>&1 | cat,那么我根本看不到任何输出。另一方面,( echo blah >&2 ) 2>&1 | tr 'a-z' 'A-Z'按预期工作:

$ ( echo blah >&2 ) 2>&1 | tr 'a-z' 'A-Z'
BLAH
$ 

有人可以解释这种行为吗? Shell 是 bash 版本 4.2.37。

答案1

如果我们看一下来源report()我们可以看到用于打印消息的函数 可以配置为写入 stderr,或用于syslog(3)记录它们。它还取决于您配置的日志记录级别。您可以查看该命令是否正在执行任何写入或系统日志调用,例如:

strace -e write,connect -o /tmp/out tac_plus ...

查看 tmp 文件中是否有类似write(1,...或其他数字的行,可能 1 表示 stdout,2 表示 stderr,3 或更多,因为syslog它是通过打开套接字并向connect()其写入来实现的。

相关内容