私はこの質問と答えを読んだ。stderrをstdoutにリダイレクトするしかし、Ubuntu 16.04 LTSではOpenMPIというソフトウェアでバグを捕まえる方法がないようです。
シェルスクリプトにOpenMPIコマンドを入力します。
mpirun -np 4 command
次に、コマンドプロンプトで次のように入力します。
job_script >& logs
これはアプリケーションソフトウェアのエラーと出力をキャプチャしますが、スクリプトで発生したOpenMPIエラーはキャプチャしません。 OpenMPIエラーは標準エラーに切り替わるので、今どうやって捕まえるべきですか?
答え1
この>&
演算子は、標準エラーと標準出力を同じ宛先にリダイレクトします。標準エラーリダイレクトは、cshが実行できない最も有名な操作の1つです。だからこうやりたいなら答えができません。 (もちろんこれは可能ですが、たとえば他のプログラムを介してのみ可能です。sh
)しかし、stdoutとstderrをリダイレクトして>&
正確にそれをやろうとしています。
一部の出力がエクスポートされると、job_script >& logs
アプリケーションは端末に直接書き込む必要があります。リダイレクトではキャッチできません。このscript
コマンドを使用して、端末出力を含むすべてをファイルに書き込むことができます。
script -c 'job_script' logs >/dev/null
そういえば2017年ですね。 (t)cshがインタラクティブな使用でbashよりも優位を占めてから約15年が経過し、zshより約25年前であり、cshはスクリプトに堪能ではありません。今引退する時間です。
答え2
stdout/stderr ストリームを分離するには、コマンドラインでcshell
次のようにします。
( job_script > stdout.log ) >& stderr.log