2

情景是这样的

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

这些参数和选项是由第三方应用程序传递的,因此我可能不知道每次向 shell 脚本传递的参数和选项到底是什么

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

我用陷阱做

trap "logger $(BASH_COMMAND)" DEBUG

然而,系统日志的输出并没有它正在运行的确切命令,而是那样......

apple=1
orange=2
command $apple $orange

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

但我想日志的输出应该是

command 1 2 

我怎样才能实现?

4

1 回答 1

7

这是一种方法:

#!/bin/bash

apple=1
orange=2
set -x

exec 2> >(logger)
echo $apple $orange

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

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

Aug 23 08:16:07 yogi logger: + echo 1 2
于 2012-08-23T07:20:14.067 回答