Как я могу подавить вывод из-за SIGSEGV или SIGFPE в программе на Fortran 90? - PullRequest
2 голосов
/ 06 января 2009

У меня есть скрипт bash, который запускает программу симуляции, написанную на Fortran 90, и весь вывод перенаправляется в файл. Если программа завершается без проблем, я устанавливаю параметр успеха. Код выглядит примерно так:

#!/bin/bash
...
echo -n "Running program..."
./sim_program >& file && success="true"
if [ $success ]; then
  echo "OK"
else
  echo "NOT OK"
fi
...

Вывод на экран должен быть либо «Выполняемая программа ... ОК», либо «Запущенная программа ... НЕ ОК». В некоторых случаях программа моделирования завершается с ошибкой с плавающей запятой или ошибкой сегментации, и соответствующие сигналы отправляются (SIGSEGV / SIGFPE). Вывод может выглядеть примерно так:

:~>execute_script
Running program.../path/to/script: line 232: 15350 Floating Point Exception ./sim_program >& file && success="true"
NOT OK

Как я могу подавить вывод ошибки из-за SIGFPE или SIGSEGV, так что я получаю

:~>execute_script
Running program... NOT OK

даже когда есть такая ошибка? Я изучил использование ловушки, например,

trap "" SIGSEGV SIGFPE
./sim_program >& file && success="true"
trap SIGSEGB SIGFPE

но тогда я все равно получаю что-то вроде

:~>execute_script
Running program... Floating Point Exception
NOT OK

Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 06 января 2009

Это сообщение об ошибке, вероятно, отправляется в stderr.

Попробуйте поставить это в начале вашего скрипта:

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

и все, что отправлено на stderr, отправится на нулевое устройство, а не на ваш терминал

0 голосов
/ 06 января 2009

Я считаю, что ваше сообщение об ошибке написано на stderr. Вы должны перенаправить его на /dev/null.

. / Sim_program 2> / dev / null

...