Bash 我怎样才能捕捉到每一句话;集合-x";登录到系统日志?
情况是 我有一个shell脚本,它使用不同的参数和选项运行一些复杂的命令 这些参数和选项是由第三方应用程序传递的,因此我可能不知道每次传递给shell脚本的参数和选项是什么 因此,为了了解这一点,我在shell脚本的开头使用set-x来查看命令到底在运行什么。我想使用logger将这些调试器消息从set-x移动到syslog 我用陷阱来做Bash 我怎样才能捕捉到每一句话;集合-x";登录到系统日志?,bash,syslog,Bash,Syslog,情况是 我有一个shell脚本,它使用不同的参数和选项运行一些复杂的命令 这些参数和选项是由第三方应用程序传递的,因此我可能不知道每次传递给shell脚本的参数和选项是什么 因此,为了了解这一点,我在shell脚本的开头使用set-x来查看命令到底在运行什么。我想使用logger将这些调试器消息从set-x移动到syslog 我用陷阱来做 trap "logger $(BASH_COMMAND)" DEBUG 然而,syslog的输出没有它正在运行的确切命令,而是类似的东西 apple=1 o
trap "logger $(BASH_COMMAND)" DEBUG
然而,syslog的输出没有它正在运行的确切命令,而是类似的东西
apple=1
orange=2
command $apple $orange
但是我想日志的输出应该是
command 1 2
我该如何实现?这里有一个方法:
#!/bin/bash
apple=1
orange=2
set -x
exec 2> >(logger)
echo $apple $orange
我们正在将stderr(set-x路由到stderr,文件描述符2)重定向到记录器程序
在我的/var/log/消息中,我得到:
Aug 23 08:16:07 yogi logger: + echo 1 2
DEBUG在执行和解析之前显示命令。顺便说一句,
$apple=1
是无效的(除非您是用Perl编码的)。这是一个很好的答案!你能详细描述一下exec2>>(记录器)做什么吗?是的,set-x
输出转到stderr。exec2>>(记录器)
将文件描述符2(stderr)重定向到记录器
程序的stdin。它被称为进程替换(请参见manbash
)。还有一个后续问题,+符号的含义是什么?仔细想想,设置PS4='$0'
(脚本名称)在这里可能很有用。