いくつかのログを出力し、いくつかの引数を許可するbashスクリプトがあります。スクリプトはログをSTDOUTに出力します。スクリプトの名前はAAA.sh
STDOUT
また、ログをおよびに印刷するスクリプトも作成したいと思いますfile
。これは で実行できますtee
。
$ AAA.sh -a -b --c=d | tee 2012-07-03-080000.log
しかし、私のチームは出力を にパイプするのを忘れることがよくありますtee
。ログをファイルに保存する必要があります。そのため、スクリプトを で囲みたいと思いますtee
。
私がやりたいのは
$ WrapAAAwithTee.sh -a -b --c=d
次に、AAAwithTee.sh はログを STDOUT とログ ファイルに出力します。AAA.sh
をラップするにはどうすればよいでしょうか?
答え1
このスクリプトは前の回答よりもうまく機能します:
#!/bin/bash
exec AAA.sh "$@" | tee "$(date +'%F-%H%M%S').log"
これはスペースでも適切に機能し、現在の時刻に基づいてログ ファイルに一意の名前を付けます。exec
また、これにより効率が少し向上し、子プロセスが起動するとプロセス ツリーからラッパーが削除されます。
答え2
以下のWrapAAAwithTee.sh
内容を含める必要があります:
#!/bin/bash
AAA.sh "$@" | tee 2012-07-03-080000.log
tee
スクリプト内では正常に機能し、"$@"
すべての親引数が含まれます。