场景是
我有一个shell脚本,它运行一些带有不同参数和选项的复杂命令。
这些参数和选项由第三方应用程序传递,这样我可能无法确切知道每次传递给shell脚本的参数和选项
因此,为了知道这一点,我在shell脚本的开头使用set -x来查看命令运行的确切内容。我想使用logger将那些调试器消息从set -x移动到syslog。
我使用陷阱来做
trap "logger $(BASH_COMMAND)" DEBUG
然而,syslog的输出没有正在运行的确切命令但是......就像那样......
apple=1
orange=2
command $apple $orange
.............................
但是我希望日志的输出应该是
command 1 2
我怎样才能实现?
答案 0 :(得分:6)
这是一种方式:
#!/bin/bash
apple=1
orange=2
set -x
exec 2> >(logger)
echo $apple $orange
我们将stderr(设置-x路由到stderr,文件描述符2)重定向到记录器程序。
在我的/ var / log / messages中我得到:
Aug 23 08:16:07 yogi logger: + echo 1 2