Para ejecutar código cuando tu script recibe la señal, usa la siguiente sintaxis:
trap arg sigspec...
"arg" es el comando que quieres ejecutar. Si el comando contiene espacios, encierralo en comillas (' '). Puedes incluir múltiples comandos seprandolos con punto y coma (;). Para cosas mas complejas, pon tu código de salida en una función y solo invoca la función. El "sigspec" muestra una lista de señales para trap y entonces ejecuta "arg". Por ejemplo para remover un archivo al salir, has lo siguiente:
trap "rm -f afile" EXIT
Ten en cuenta que EXIT no es una señal real (ejecuta kill -l para ver todas las señales); esta sintetizada por bash.
Ten cuidado cuando usas comodines en "arg" ya que si no están encerrados en comillas o encerrados con comillas dobles, pueden expandirse cuando la sentencia trap es encontrada y no cuando "arg" es ejecutado. Por ejemplo, si tienes un archivo llamado "abc.tmp" y la siguiente sentencia trap es ejecutada:
trap "rm -f *.tmp" EXIT
el comando que se ejecuta cuando el código sale es "rm -f abc.tmp" y no "rm -f *.tmp". Para evitar este problema usa comillas simples.
Si creas archivos temporales en varios lugares de tu código y no usas estilo para nombrarlos esto podría permitirte usar un comodín en tu sentencia trap y no preocuparte por cambiar tu sentencia trap en cada parte del código, podrías escribir algo como esto que te permite añadir un nuevo comando trap que se ejecute al salir:
#!/bin/bash
declare -a on_exit_items
function al_salir()
{
for i in "${on_exit_items[@]}"
do
echo "al_salir: $i"
eval $i
done
}
function agregar_al_salir()
{
local n=${#on_exit_items[*]}
on_exit_items[$n]="$*"
if [[ $n -eq 0 ]]; then
echo "Configurando trap"
trap al_salir EXIT
fi
}
touch $$-1.tmp
agregar_al_salir rm -f $$-1.tmp
touch $$-2.tmp
agregar_al_salir rm -f $$-2.tmp
ls -la
Aquí la función agregar_al_salir() añade comandos a un arreglo (array) y la función al_salir() hace un bucle a través de los comandos en el arreglo y los ejecutas al salir. La función al_salir se configura la primera vez que agregar_al_salir es llamado.
Fuente.
No hay comentarios:
Publicar un comentario