4

別のプログラムを開始するために使用される簡単なスクリプトがあります。この他のプログラムはSIGSEGV、私の出力を混乱させる を生成することがあります。したがって、が無視さstderrれる/dev/nullように を一時的にリダイレクトすることになっている行をいくつか追加しました。SIGSEGV以下は私のコードのドラフトです:

exec 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>1

問題は、最後の行が私が望むことをしないことです。最初の行は明らかに機能し、stderr. 最後の行は、元の場所に戻すことstderrになっています (これは、 と同じだと思っただけですstdout)。

どんな助けでも感謝します!

4

2 に答える 2

8

別のオプションは次のとおりです。

exec 3> /dev/stderr 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>&3

あるいは

exec 3>&2 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>&3

このようにして、スクリプトはスクリプトの stdout と stderr の分離を保持します (つまり、スクリプトの stdout と stderr を別々にリダイレクトできます。

于 2009-01-15T15:48:55.893 に答える
0

progname の実行のみにリダイレクトしないのはなぜですか?

   progname > ./tmp/run.txt 2>/dev/null && run_status='OK'

あるいはもしかしたら

{
   progname > ./tmp/run.txt && run_status='OK'
} 2>/dev/null
于 2009-01-15T15:15:45.633 に答える