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!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük