我有一个bash脚本,运行一个用Fortran 90编写的仿真程序,所有的输出都被重定向到一个文件中。如果程序正常结束,我设置一个成功的参数。代码大致如下:
```
#!/bin/bash
...
echo -n "Running program..."
./sim_program &> file && success="true"
if [ $success ]; then
echo "OK"
else
echo "NOT OK"
fi
...
```
屏幕输出应该是“Running program... OK”或“Running program... NOT 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,例如:
```
trap "" SIGSEGV SIGFPE
./sim_program &> file && success="true"
trap SIGSEGB SIGFPE
```
但是这样仍然会得到类似以下输出:
```
:~>execute_script
Running program... Floating Point Exception
NOT OK
```
非常感谢您的帮助!