3

Fortran 90 で記述されたシミュレーション プログラムを実行する bash スクリプトがあり、すべての出力がファイルにリダイレクトされます。プログラムが問題なく終了したら、success パラメータを設定します。コードは次のようになります。

#!/ビン/バッシュ
...
echo -n "プログラムを実行しています..."
./sim_program >& ファイル && success="true"
[ $success ]; それから
  エコー「OK」
そうしないと
  エコー「OKではありません」
フィ
...

画面への出力は、「Running program... OK」または「Running program... NOT OK」のいずれかになります。場合によっては、シミュレーション プログラムが浮動小数点例外またはセグメンテーション エラーでクラッシュし、対応するシグナルが送信されます (SIGSEGV / SIGFPE)。出力は次のようになります。

:~>execute_script
実行中のプログラム.../path/to/script: 232行目: 15350 Floating Point Exception ./sim_program >& file && success="true"
良くないですよ

SIGFPE または SIGSEGV によるエラー出力を抑制するにはどうすればよいですか?

:~>execute_script
プログラムを実行しています... OKではありません

そのようなエラーがある場合でも?たとえば、トラップの使用を検討しました

トラップ "" SIGSEGV SIGFPE
./sim_program >& ファイル && success="true"
トラップ SIGSEGB SIGFPE

しかし、私はまだ次のようなものを取得します

:~>execute_script
プログラムを実行中... 浮動小数点例外
良くないですよ

どんな助けでも大歓迎です!

4

2 に答える 2

3

That error message is probably going to stderr.

Try putting this at the start of your script:

#!/bin/bash
exec 2> /dev/null

and anything send to stderr will go to the null device rather than your terminal.

于 2009-01-06T13:06:24.580 に答える
1

I believe your error message is written on stderr. You need to redirect it to /dev/null.

./sim_program 2>/dev/null

于 2009-01-06T13:03:12.590 に答える