Jeg vil omdirigere utgangen til et program til en fil med variabelnavn og samtidig omdirigere den mulige feilen. Dette er skriptet så langt:
#!/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 $?
Hvis jeg kjører programmet og vet at det vil gjøre en feil, får jeg dette 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
Jeg vet hvorfor denne feilen skjer, men jeg vil at den ikke skal vises på terminalen slik. Kan «t jeg bruke 2>
samtidig som >
?
Takk.
Kommentarer
- Skallet som kjører skriptet rapporterer feilen, ikke selve PET-linux.x-programmet. Omdirigering gjelder bare for PET-linux.x-programmet .
Svar
Som påpekt i kommentarer , det er skallskriptet som rapporterer unntaket for flytende punkt fra applikasjonen din.
Endre PET-linux.x
-linjen som følger for å fange unntaket og gå stille ut. Du kan teste for unntaket ved å sjekke returstatus for 136 og logge den etter behov. (Hvis du ikke vil ha rapporteringen, er det bare å utelate den andre linjen. Jeg har tatt den med slik at du kan se hvordan du vil identifisere et flytende unntak programmatisk hvis du trenger å gjøre 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 fungerte! Tusen takk!