Estoy siguiendo esta guía sobre cómo configurar la autenticación SSH sin contraseña con ssh-agent.
Para iniciar ssh-agent, el autor recomienda el siguiente código en .bash_profile
:
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi
No entiendo por qué está atrapando la señal 0. Según la señal del hombre 7, no hay tal señal.
¿Es solo un error tipográfico o un error o esto realmente logra algo?
0
untrap
comando de shell . Al enviar una señal conkill
, un número de señal de 0 significa no enviar una señal después de todo; Esta es una forma de probar la existencia del proceso objetivo.trap -l
!Como muestra @Mat en su respuesta, un SIGSPEC de 0, cuando se usa en el
trap
comando, hará que eltrap
comando se ejecute cuando salga el script.Este ejemplo ilustra lo que sucede.
Cuando ejecutamos esto:
Se sienta aquí esperando indefinidamente. En otra ventana, si ahora le enviamos
kill
señales, verá que akill -0
no matará el proceso, a pesar de que la señal 0 aparece en eltrap
comando.Sin embargo, si utilizamos
kill
el script con la señal 1kill -1
:Veremos que el guión sale e imprime el mensaje "hola" 2 veces. El primero para la señal 1, y el segundo porque salió el script.
fuente
trap en 0 se ejecuta cuando el shell sale. Se usa comúnmente para limpiar archivos tmp en un lugar que siempre se ejecuta:
la salida al final de la trampa sale del shell en la limpieza con el estado correcto.
fuente