Egy program kimenetét át akarom irányítani egy változó nevű fájlba, és ezzel egyidejűleg átirányítani a lehetséges hibát. Ez az eddigi szkript:
#!/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 $?
Ha úgy futtatom a programot, hogy tudom, hogy hibát fog okozni, akkor ezt kapom a terminálon:
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
Tudom, miért történik ez a hiba, de szeretném, ha nem így jelenik meg a terminálon. Nem használhatom a 2>
-et egyszerre a >
-vel?
Köszönöm.
Megjegyzések
- A parancsfájlt futtató shell jelentése a hiba, nem maga a PET-linux.x program. Az átirányítás csak a PET-linux.x programra vonatkozik. .
Válasz
Amint arra a megjegyzések , a shell parancsfájl jelenti a lebegőpontos kivételt az alkalmazásból.
Módosítsa a PET-linux.x
sort az alábbiak szerint a kivétel elkapásához. és némán lépjen ki. Kipróbálhatja a kivételt úgy, hogy ellenőrzi a 136 visszatérési állapotát, és naplózza. (Ha nem akarja a jelentést, csak hagyja ki ezt a második sort. Belefoglaltam, hogy lássa, hogyan akkor programszerűen azonosítaná a lebegőpontos kivételt, ha erre szükség lenne.)
( 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
Megjegyzések
- Sikerült! Nagyon köszönöm!