要将命令的 stderr 重定向到 syslog,我使用了一个帮助程序,例如
with_logger my-tag command arg1 ...
with_logger 在哪里
#!/bin/bash
syslog_tag="$1"
shift
exec "$@" 2> >(exec /usr/bin/logger -t "$syslog_tag")
这里 2 个exec
调用和进程替换用于避免 bash 进程等待命令或记录器命令完成。然而,这会产生一个僵尸。也就是说,当命令退出关闭其标准错误后,记录器进程退出时,没有人等待该进程。这会导致父进程收到关于未知子进程的意外信号。
为了解决这个问题,我想我必须以某种方式否认这个>()
过程。有没有办法做到这一点?
更新以澄清问题
我需要从另一个程序调用我的包装脚本,而不是从 bash 脚本。
更新 2 - 这是一个错误的问题
请参阅下面的答案。