En alguna ocasión, puede resultar útil trappear señales en los shell scripts. Un ejemplo clásico de señal a trapear es el famoso Ctrl+C (^C).
Trappear una señal es fácil, simplemente debemos definir una acción (o función) que se ejecutará al momento de recibir la señal, y luego definir las señales a trappear con el comando trap.
Un ejemplo sencillo:
function trapper {
echo "Signal trapped"
}
trap trapper EXIT
while true;
do
echo "I'm alive"
sleep 1
done
Realicemos un análisis rapido. El script imprime en la salida estándar un mensaje "I'm alive" cada segundo. La ejecución no termina a menos que enviemos una señal (while true;). Al presionar Ctrl+C estamos enviando la señal de EXIT, esta señal es interceptada y dirigida la ejecución a la función trapper, esto gracias a que antes con trap definimos la acción a tomar ante la señal.
Así como trapeamos la señal EXIT, podemos trapear varias señales, puedes consultar el comando kill para consultar las distintas señales que se pueden enviar sobre un proceso en ejecución.
El uso del trapeo de señales se utiliza en los scripts para no dejar el sistema de archivos en un estado inconsistente; cosas como archivos de bloqueo, archivos temporales o archivos que has actualizado y no puedes asegurar su integridad. Ante casos como éstos, es común encontrar scripts que ante señal de EXIT (como en el ejemplo) eliminan archivos temporales o de lockeo o crean una suerte de "rollback" de las acciones ejecutadas.
Si quieres escribir un script robusto, es muy probable que requieras de trapear, por lo tanto, agéndalo.
Comentarios: