重複の可能性:
画面に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
。)