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!