У меня есть скрипт 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
Любая помощь приветствуется!