Jeg vil omdirigere output fra et program til en fil med variabelnavn og samtidig omdirigere den mulige fejl. Dette er scriptet hidtil:
#!/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 kører programmet og ved, at det ville gøre en fejl, 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 ved, hvorfor denne fejl sker, men jeg vil have, at den ikke vises på terminalen sådan. Kan “t jeg bruge 2>
på samme tid som >
?
Tak.
Kommentarer
- Skallen, der kører scriptet, rapporterer fejlen, ikke selve PET-linux.x-programmet. Omdirigering gælder kun for PET-linux.x-programmet .
Svar
Som det er blevet påpeget i kommentarer , det er dit shell-script, der rapporterer undtagelsen om flydende punkt fra din applikation.
Rediger PET-linux.x
-linjen som følger for at fange undtagelsen og afslut stille. Du kan teste for undtagelsen ved at kontrollere returstatus for 136 og logge den efter behov. (Hvis du ikke ønsker rapporteringen, skal du bare udelade den anden linje. Jeg har inkluderet den, så du kan se, hvordan du identificerer en undtagelse med flydende punkt programmatisk, hvis du har brug for 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 fungerede! Mange tak!