fre*_*set 29 shell io-redirection stdout stdin
我有一个程序需要在启动时运行,它在 stdout 和 stderr 上有输出,我想使用 logger 命令重定向到系统日志。我在启动脚本中的内容是:
/home/dirname/application_name -v|logger 2>&1 &
这将标准输出重定向到系统日志就好了,但标准错误正在进入控制台,所以我需要改进命令。
slm*_*slm 38
您需要在将 STDERR 和 STDOUT 的输出通过管道传输到logger
. 试试这个:
/home/dirname/application_name -v 2>&1 | logger &
Run Code Online (Sandbox Code Playgroud)
$ echo "hi" 2>&1 | logger &
[1] 26818
[1]+ Done echo "hi" 2>&1 | logger
$ sudo tail /var/log/messages
Apr 12 17:53:57 greeneggs saml: hi
Run Code Online (Sandbox Code Playgroud)
如果在实际 Bash shell 中谨慎使用,您也可以在此处使用缩写符号(不要与 Dash 混淆):
$ echo "hi" |& logger &
Run Code Online (Sandbox Code Playgroud)
注意:这相当于<cmd1> 2>&1 | <cmd2>
. 再次仅在以交互方式使用实际 Bash shell 时使用上述内容,这将是处理它的好方法。
摘自ABSG
# |& 被添加到 Bash 4 作为 2>&1 | 的缩写。