如何在Fortran 90程序中抑制由SIGSEGV或SIGFPE引起的输出?

3
我有一个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 ``` 非常感谢您的帮助!
2个回答

3
那个错误信息可能会输出到stderr。
尝试在脚本开头加入以下内容:
#!/bin/bash
exec 2> /dev/null

任何发送到stderr的内容都会被发送到null设备,而不是您的终端。


1

我相信你的错误信息是写在stderr上的。你需要将其重定向到/dev/null。

./sim_program 2>/dev/null


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接