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!

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *