シェルスクリプトを tee でラップする

シェルスクリプトを tee でラップする

いくつかのログを出力し、いくつかの引数を許可する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スクリプト内では正常に機能し、"$@"すべての親引数が含まれます。

関連情報