Quiero redirigir la salida de un programa a un archivo con nombre de variable y, al mismo tiempo, redirigir el posible error. Este es el script hasta ahora:
#!/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 $?
Si ejecuto el programa sabiendo que cometería un error, obtengo esto en la 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
Sé por qué ocurre este error, pero quiero que no aparezca en la terminal de esa manera. «¿No puedo usar 2>
al mismo tiempo que >
?
Gracias.
Comentarios
- El shell que ejecuta el script informa el error, no el programa PET-linux.x en sí. La redirección solo se aplica al programa PET-linux.x .
Respuesta
Como se ha señalado en el comentarios , es su script de shell que informa la excepción de punto flotante de su aplicación.
Modifique la línea PET-linux.x
de la siguiente manera, para detectar la excepción y salir silenciosamente. Puede probar la excepción verificando el estado de devolución para 136 y registrándolo según corresponda. (Si no desea el informe, simplemente omita la segunda línea. La he incluido para que pueda ver cómo identificaría una excepción de punto flotante mediante programación si fuera necesario).
( 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
Comentarios
- ¡Funcionó! ¡Muchas gracias!