スクリプトコマンドを使用したオプションのstdout、stderr、およびロギング

スクリプトコマンドを使用したオプションのstdout、stderr、およびロギング

重複の可能性:
画面にstderrのみを表示し、stdoutとstderrをファイルに書き込みます。
stdout、stderr、およびロギングにスクリプトコマンドを使用する

cattest.sh:

rm -v foo.tmp
date
pwd

cattest2.sh:

script bar.log -c './test.sh'

test2.shを実行すると、端末に次のものが表示されることが予想されます。

Fri Feb 17 18:04:30 PST 2012  
/home/me/me

しかし、bar.logで私は次を見たいと思います:

removed 'foo.tmp'  
Fri Feb 17 18:04:30 PST 2012  
/home/me/me

または(foo.tmpが存在しない場合)

rm: cannot remove 'foo.tmp'  
Fri Feb 17 18:04:30 PST 2012  
/home/me/me

これは可能ですか?

ベストアンサー1

script一時端末のすべての出力が収集され、独自の標準出力がその端末に表示されるため、これを直接実行するのは困難です。

では、test.sh端末に表示したいメッセージと履歴にのみ表示したいメッセージを区別する方法が必要です。たとえば、各行にプレフィックスを追加して重要度レベルを示します。例の他の行はで始まらないので、@重要ではない(記録のみ)行の前に付けます@

rm -v foo.tmp | sed 's/^/@/'
date
pwd

ラッパースクリプトから:

script bar.log -c './test.sh | grep -v "^@"'

ユーティリティを変更しないと、これより良い結果が得られないようですscript。 (このルートに行きたい場合は、最も簡単な方法は数行で十分ですexpect。)

おすすめ記事