0

すべての stdout と errout を、dateTime などの追加情報とともにログに記録するロガー スクリプトに転送したいと思います。スクリプトがエラーを引き起こしました。グーグルで調べた後、最終的にこの方法でbashプログラムを作成しました。メインスクリプトに次の2行を追加しました。

exec  1> >(xargs ./doLog)
exec  2> >(xargs ./doLog)

./doLog はどういうわけか次のようになります。

if [ -n $1 ]
then
    echo -n "Jaky: `date`: $@ " >> $Log_File
fi

したがって、1> と 2> からのすべての入力を受け取り、それをログ ファイルにエコーします。問題は、何らかの理由で doLog スクリプトを同じ結果を実行する関数に変換する必要があることです。しかし、exec 1 と 2 の入力を関数に渡す方法がわかりません。xargs やその他のファイル記述子を試しましたが、結果が得られませんでした。

もう 1 つの問題は、doLog に渡されるログに行末文字が含まれていないことです。そのため、すべての出力が互いに接続されているように見えます。助けてください。

4

1 に答える 1

0

関数には使用できませんxargs。そのため、関数内のデータを stdin から直接読み取る必要があります。を使用して行いreadます。以下に小さな例を示します。

関数:

dolog()
{
  while read log_entry
  do
   echo "Jaky: `date`: $log_entry " >> $Log_File 
  done
}

使用法:

your-command | dolog
于 2013-01-26T07:23:35.880 に答える