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!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *