cshのopenmpi標準エラーをファイルにリダイレクトできません。

cshのopenmpi標準エラーをファイルにリダイレクトできません。

私はこの質問と答えを読んだ。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

関連情報