프로그램의 출력을 변수 이름이있는 파일로 리디렉션하고 동시에 가능한 오류를 리디렉션하고 싶습니다. 이것은 지금까지의 스크립트입니다.

#!/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>>와 동시에 사용할 수 없습니까?

감사합니다.

코멘트

  • 스크립트를 실행하는 쉘이 PET-linux.x 프로그램 자체가 아니라 오류를보고합니다. 리디렉션은 PET-linux.x 프로그램에만 적용됩니다. .

답변

주석 , 애플리케이션의 부동 소수점 예외를보고하는 쉘 스크립트입니다.

예외를 포착하려면 다음과 같이 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 

댓글

  • 작동했습니다! 감사합니다!

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다