Chci přesměrovat výstup programu do souboru s názvem proměnné a zároveň přesměrovat možnou chybu. Toto je zatím skript:
#!/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 $?
Pokud spustím program s vědomím, že by došlo k chybě, dostanu to do terminálu:
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
Vím, proč k této chybě dochází, ale chci, aby se na terminálu takhle nezobrazovala. Nemohu použít 2>
současně s >
?
Děkuji.
Komentáře
- Shell, ve kterém je spuštěn skript, hlásí chybu, nikoli samotný program PET-linux.x. Přesměrování se týká pouze programu PET-linux.x .
Odpověď
Jak bylo uvedeno v komentáře , je to váš shell skript, který hlásí výjimku s plovoucí desetinnou čárkou z vaší aplikace.
Upravte řádek PET-linux.x
tak, aby výjimku zachytil a odejít tiše. Výjimku můžete otestovat tak, že zkontrolujete návratový stav 136 a podle potřeby jej přihlásíte. (Pokud hlášení nechcete, jen ten druhý řádek vynechejte. Zahrnul jsem to, abyste viděli, jak v případě potřeby byste programově identifikovali výjimku s plovoucí desetinnou čárkou.)
( 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
Komentáře
- Fungovalo to! Mnohokrát děkujeme!