2

シナリオはというと

さまざまなパラメーターとオプションを使用していくつかの複雑なコマンドを実行するシェル スクリプトがあります。

これらのパラメーターとオプションはサードパーティのアプリケーションによって渡されるため、毎回シェル スクリプトに渡されるパラメーターとオプションが正確にわからない場合があります。

したがって、それを知るために、シェルスクリプトの開始時に set -x を使用して、コマンドが実行されているものを正確に確認します。そして、ロガーを使用して、これらのデバッガー メッセージを set -x から syslog に移動したいと思います。

私はトラップを使って

trap "logger $(BASH_COMMAND)" DEBUG

ただし、syslog の出力には、実行中の正確なコマンドはありませんが、そのようなものです。

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 を指定します)。

/var/log/messages で次のように表示されます。

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