Как я могу подавить выходные данные из-за SIGSEGV или SIGFPE в программе Fortran 90?


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

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

Вывод на экран должен быть либо " запущенная программа... OK " или " запуск программы... НЕ В ПОРЯДКЕ". В некоторых случаях программа моделирования аварийно завершает работу с исключением с плавающей запятой или ошибкой сегментации, и посылаются соответствующие сигналы (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

2 ответа:

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

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

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

И все, что отправляется в stderr, будет отправляться на нулевое устройство, а не на ваш терминал.

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

./sim_program 2>/dev / null