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!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *