Bash 我怎样才能捕捉到每一句话;集合-x";登录到系统日志?

Bash 我怎样才能捕捉到每一句话;集合-x";登录到系统日志?,bash,syslog,Bash,Syslog,情况是 我有一个shell脚本,它使用不同的参数和选项运行一些复杂的命令 这些参数和选项是由第三方应用程序传递的,因此我可能不知道每次传递给shell脚本的参数和选项是什么 因此,为了了解这一点,我在shell脚本的开头使用set-x来查看命令到底在运行什么。我想使用logger将这些调试器消息从set-x移动到syslog 我用陷阱来做 trap "logger $(BASH_COMMAND)" DEBUG 然而,syslog的输出没有它正在运行的确切命令,而是类似的东西 apple=1 o

情况是

我有一个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 
我该如何实现?

这里有一个方法:

#!/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'
(脚本名称)在这里可能很有用。