是否可以在保留 stdout 的同时对 stderr 进行管道传输?

是否可以在保留 stdout 的同时对 stderr 进行管道传输?

我有一个长时间运行的进程,它将状态信息写入标准输出,并将调试信息记录到标准错误。

我想将 stderr 输出通过管道传输到logger,以便写入 stderr 的任何内容实际上最终都会进入 syslog,同时能够读取进程的 stdout。

是否有可能做到这一点?

答案1

{ cmd 2>&1 >&3 3>&- | logger 3>&-; } 3>&1

这个想法是stdout 被复制到文件描述符 (fd) 3 上,并恢复到cmdstdout 上,而 cmd 的文件描述符 2 (stderr) 本身会转到记录器的管道。

3>&-是在 cmd 和 logger 命令达到其目的后关闭该 fd,因为这些命令不需要/使用它。

相关内容