我有一个长时间运行的进程,它将状态信息写入标准输出,并将调试信息记录到标准错误。
我想将 stderr 输出通过管道传输到logger
,以便写入 stderr 的任何内容实际上最终都会进入 syslog,同时能够读取进程的 stdout。
是否有可能做到这一点?
答案1
{ cmd 2>&1 >&3 3>&- | logger 3>&-; } 3>&1
这个想法是外stdout 被复制到文件描述符 (fd) 3 上,并恢复到cmd
stdout 上,而 cmd 的文件描述符 2 (stderr) 本身会转到记录器的管道。
这3>&-
是在 cmd 和 logger 命令达到其目的后关闭该 fd,因为这些命令不需要/使用它。