我如何捕获每个"set -x"日志到syslog?

Kit*_* Ho 2 bash syslog

情景就是这样

我有一个shell脚本,它运行一些带有不同参数和选项的复杂命令.

这些参数和选项由第三方应用程序传递,这样我可能无法确切知道每次向shell脚本传递的参数和选项

所以为了知道这一点,我在shell脚本的开头使用set -x来查看命令运行的确切内容.我想使用logger将那些调试器消息从set -x移动到syslog.

我用陷阱来做

trap "logger $(BASH_COMMAND)" DEBUG
Run Code Online (Sandbox Code Playgroud)

但是,syslog的输出没有正在运行的确切命令,但是......就像那样......

apple=1
orange=2
command $apple $orange
Run Code Online (Sandbox Code Playgroud)

.............................

但我想要日志的输出应该是

command 1 2 
Run Code Online (Sandbox Code Playgroud)

我怎么能实现?

cda*_*rke 6

这是一种方式:

#!/bin/bash

apple=1
orange=2
set -x

exec 2> >(logger)
echo $apple $orange
Run Code Online (Sandbox Code Playgroud)

我们将stderr(设置-x路由到stderr,文件描述符2)重定向到记录器程序.

在我的/ var/log/messages中,我得到:

Aug 23 08:16:07 yogi logger: + echo 1 2
Run Code Online (Sandbox Code Playgroud)

  • 想想看,设置 `PS4='$0'` (脚本的名称)在这里可能会有用。 (2认同)