Vreau să redirecționez ieșirea unui program către un fișier cu numele variabilei și, în același timp, să redirecționez posibila eroare. Acesta este scriptul de până acum:

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

Dacă rulez programul știind că ar face o eroare, îl primesc în terminal:

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 

Știu de ce se întâmplă această eroare, dar vreau să nu apară așa pe terminal. Nu pot folosi 2> în același timp cu >?

Mulțumesc.

Comentarii

  • Shell-ul care execută scriptul raportează eroarea, nu programul PET-linux.x în sine. Redirecționarea se aplică numai programului PET-linux.x .

Răspuns

După cum sa subliniat în comentarii , este scriptul dvs. shell care raportează excepția în virgulă mobilă din aplicația dvs.

Modificați linia PET-linux.x după cum urmează, pentru a prinde excepția și ieșiți în tăcere. Puteți testa excepția verificând starea de returnare pentru 136 și înregistrând-o după caz. (Dacă nu doriți raportarea, omiteți a doua linie. Am inclus-o pentru a putea vedea cum ați identifica o excepție în virgulă mobilă la nivel de program dacă ar trebui să faceți acest lucru.)

( 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 

Comentarii

  • A funcționat! Mulțumesc mult!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *