如何重定向此“浮点异常(核心转储)”错误?

如何重定向此“浮点异常(核心转储)”错误?

我想将程序的输出重定向到具有变量名的文件,同时重定向可能的错误。这是到目前为止的脚本:

#!/bin/bash

echo "Se ejecutará el PET-linux.x con PET.inp como input, debe indicarse el nombre del archivo output."
echo "Nombre del archivo .out: "
read outfile

./PET-linux.x < PET.inp > ${outfile}.out 2> /dev/null

echo $?

如果我运行程序时知道它会出错,我会在终端中看到以下内容:

samuel@samuel-P5Wx6:~/Documents/Fisica/19-20/Radiactividad/Prácticas/Practicas-MontCarlo/PET/pruebas$ ./ejecutarPET.sh 
Se ejecutará el PET-linux.x con PET.inp como input, debe indicarse el nombre del archivo output.
Nombre del archivo .out: 
test
./ejecutarPET.sh: line 7: 25715 Floating point exception(core dumped) ./PET-linux.x < PET.inp > ${outfile}.out 2> /dev/null
136

我知道为什么会发生这个错误,但我希望它不要像这样出现在终端上。不能2>同时使用吗>

谢谢。

答案1

正如在评论,它是您的 shell 脚本,报告应用程序中的浮点异常。

PET-linux.x如下修改该行,以捕获异常并静默退出。您可以通过检查 136 的返回状态并根据需要记录它来测试异常。 (如果您不需要报告,只需省略第二行。我将其包含在内,以便您可以了解如何以编程方式识别浮点异常(如果您需要这样做)。

( trap 'exit' SIGFPE; ./PET-linux.x < PET.inp > "$outfile.out" ) 2>/dev/null
[[ $? -eq 136 ]] && echo "Uh oh we caught a floating point exception" >&2

相关内容