![이 "부동 소수점 예외(코어 덤프)" 오류를 어떻게 리디렉션할 수 있나요?](https://linux55.com/image/172765/%EC%9D%B4%20%22%EB%B6%80%EB%8F%99%20%EC%86%8C%EC%88%98%EC%A0%90%20%EC%98%88%EC%99%B8(%EC%BD%94%EC%96%B4%20%EB%8D%A4%ED%94%84)%22%20%EC%98%A4%EB%A5%98%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
가능한 오류를 리디렉션하는 동안 프로그램의 출력을 변수 이름이 있는 파일로 리디렉션하고 싶습니다. 지금까지의 스크립트는 다음과 같습니다.
#!/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
에서와 같이논평, 이는 애플리케이션의 부동 소수점 예외를 보고하는 쉘 스크립트입니다.
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