Voglio reindirizzare loutput di un programma a un file con nome variabile e, allo stesso tempo, reindirizzare leventuale errore. Questo è lo script fino ad ora:
#!/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 eseguo il programma sapendo che potrebbe commettere un errore, ottengo questo nel terminale:
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
So perché si verifica questo errore, ma voglio che non venga visualizzato sul terminale in questo modo. “Non posso utilizzare 2>
contemporaneamente a >
?
Grazie.
Commenti
- La shell che esegue lo script riporta lerrore, non il programma PET-linux.x stesso. Il reindirizzamento si applica solo al programma PET-linux.x .
Risposta
Come sottolineato nella commenti , è il tuo script di shell che segnala leccezione in virgola mobile dalla tua applicazione.
Modifica la riga PET-linux.x
come segue, per catturare leccezione ed esci silenziosamente. Puoi testare leccezione controllando lo stato di ritorno per 136 e registrandolo come appropriato. (Se non vuoi il rapporto, ometti semplicemente la seconda riga. Lho inclusa in modo che tu possa vedere come identificheresti uneccezione in virgola mobile a livello di codice se fosse necessario.)
( 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
Commenti
- Ha funzionato! Grazie mille!