3

我有一个 bash 脚本,它运行一个用 Fortran 90 编写的模拟程序,所有输出都重定向到一个文件。如果程序完成没有问题,我设置一个成功参数。代码看起来像这样:

#!/bin/bash
...
echo -n "正在运行程序..."
./sim_program >& 文件 && 成功="true"
如果 [ $成功 ]; 然后
  回声“确定”
别的
  回声“不好”
菲
...

屏幕的输出应该是“正在运行的程序...OK”或“正在运行的程序...不OK”。在某些情况下,仿真程序会因浮点异常或分段错误而崩溃,并发送相应的信号(SIGSEGV / SIGFPE)。输出可能如下所示:

:~>execute_script
运行程序.../path/to/script: line 232: 15350 Floating Point Exception ./sim_program >& file && success="true"
不好

如何抑制由于 SIGFPE 或 SIGSEGV 导致的错误输出,以便我得到

:~>execute_script
运行程序...不行

即使有这样的错误?我已经研究过使用陷阱,例如

陷阱 "" SIGSEGV SIGFPE
./sim_program >& 文件 && 成功="true"
陷阱 SIGSEGB SIGFPE

但后来我仍然得到类似的东西

:~>execute_script
运行程序...浮点异常
不好

任何帮助表示赞赏!

4

2 回答 2

3

该错误消息可能会发送到 stderr。

尝试将其放在脚本的开头:

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

发送到 stderr 的任何内容都将发送到空设备而不是您的终端。

于 2009-01-06T13:06:24.580 回答
1

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

./sim_program 2>/dev/null

于 2009-01-06T13:03:12.590 回答