Jag vill omdirigera utdata från ett program till en fil med variabelt namn och samtidigt omdirigera det eventuella felet. Det här är skriptet hittills:

#!/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 $? 

Om jag kör programmet med vetskap om att det skulle göra ett fel får jag detta i terminalen:

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 

Jag vet varför detta fel händer, men jag vill att det inte ska visas på terminalen så. Kan jag inte använda 2> samtidigt som >?

Tack.

Kommentarer

  • Skalet som kör skriptet rapporterar felet, inte själva programmet PET-linux.x. Omdirigeringen gäller endast för PET-linux.x-programmet .

Svar

Som påpekats i kommentarer , det är ditt skalskript som rapporterar undantaget för flytande punkt från din applikation.

Ändra raden PET-linux.x på följande sätt för att fånga undantaget och avsluta tyst. Du kan testa undantaget genom att kontrollera returstatusen för 136 och logga den efter behov. (Om du inte vill ha rapporteringen, bara utelämna den andra raden. Jag har inkluderat den så att du kan se hur du skulle kunna identifiera ett flytande undantag programmatiskt om du behövde göra det.)

( 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 

Kommentarer

  • Det fungerade! Tack så mycket!

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *