我有一个运行用Fortran 90编写的模拟程序的bash脚本,所有输出都被重定向到一个文件。如果程序没有问题,我设置了一个成功参数。代码看起来像这样:
#!/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
感谢任何帮助!
答案 0 :(得分:2)
该错误消息可能是stderr。
尝试将其放在脚本的开头:
#!/bin/bash
exec 2> /dev/null
并且发送到stderr的任何内容都将转到null设备而不是终端。
答案 1 :(得分:0)
我相信您的错误消息是写在stderr上的。您需要将其重定向到/ dev / null。
./ sim_program 2> / dev / null