Chcę przekierować wyjście programu do pliku o nazwie zmiennej i jednocześnie przekierować możliwy błąd. To jest dotychczasowy skrypt:

#!/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 $? 

Jeśli uruchomię program ze świadomością, że spowoduje błąd, w terminalu pojawi się następujący komunikat:

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 

Wiem, dlaczego występuje ten błąd, ale chcę, aby nie pojawiał się na terminalu w ten sposób. Czy „t mogę używać 2> w tym samym czasie co >?

Dziękuję.

Komentarze

  • Powłoka uruchamiająca skrypt zgłasza błąd, a nie sam program PET-linux.x. Przekierowanie dotyczy tylko programu PET-linux.x .

Odpowiedź

Jak wskazano w komentarze , to twój skrypt powłoki zgłasza wyjątek zmiennoprzecinkowy z Twojej aplikacji.

Zmodyfikuj wiersz PET-linux.x w następujący sposób, aby wychwycić wyjątek i po cichu wyjdź. Możesz przetestować wyjątek, sprawdzając stan powrotu dla 136 i logując go w razie potrzeby. (Jeśli nie chcesz raportowania, po prostu pomiń tę drugą linię. Dołączam ją, aby zobaczyć, jak w razie potrzeby zidentyfikowałbyś wyjątek zmiennoprzecinkowy programowo.)

( 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 

Komentarze

  • Udało się! Wielkie dzięki!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *