Desejo redirecionar a saída de um programa para um arquivo com nome de variável e, ao mesmo tempo, redirecionar o possível erro. Este é o script até agora:
#!/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 $?
Se eu executar o programa sabendo que cometeria um erro, obtenho isto no terminal:
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
Eu sei por que esse erro acontece, mas quero que ele não apareça assim no terminal. Posso usar 2>
ao mesmo tempo que >
?
Obrigado.
Comentários
- O shell que executa o script está relatando o erro, não o programa PET-linux.x em si. O redirecionamento só se aplica ao programa PET-linux.x .
Resposta
Como foi apontado na comentários , é seu script de shell relatando a exceção de ponto flutuante de seu aplicativo.
Modifique a linha PET-linux.x
como segue, para capturar a exceção e saia silenciosamente. Você pode testar a exceção verificando o status de retorno de 136 e registrando-o conforme apropriado. (Se você não quiser o relatório, apenas omita a segunda linha. Eu a incluí para que você possa ver como você identificaria uma exceção de ponto flutuante programaticamente se necessário.)
( 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
Comentários
- Funcionou! Muito obrigado!