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!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *