Je suis ce guide sur la façon de configurer l'authentification SSH sans mot de passe avec ssh-agent.
Pour démarrer ssh-agent, l'auteur recommand le code suivant dans le .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
Je ne comprends pas pourquoi il piège le signal 0. Selon le signal de l' homme 7, il n'y a pas un tel signal.
Est-ce juste une faute de frappe ou un bug ou est-ce que cela fait vraiment quelque chose?
Du manuel bash :
trap [-lp] [[arg] sigspec ...]
… Si un sigspec est EXIT (0), la command arg est exécutée à la sortie du shell.
le trap sur 0 est exécuté lorsque le shell sort. Il est couramment utilisé pour nettoyer les files tmp à un endroit qui est toujours exécuté:
tmp = / tmp / myscript. $$
trap 'rm -f $ tmp; sortie '0 1 2 15
do_a_bunch_of_stuff
Sortie
la sortie à la fin du piège sort du shell au nettoyage avec le bon statut.
Comme le montre @Mat dans sa réponse, un SIGSPEC de 0, lorsqu'il est utilisé dans la command trap
, entraînera l'exécution de la command trap
lors de la sortie du script.
Cet exemple illustre ce qui se passe.
$ cat tr.bash #!/bin/bash echo "PID: $$" trap 'echo hi; exit 1' 0 1 2 15 while [ 1 ]; do sleep 3 done
Quand nous courons ceci:
$ ./tr.bash PID: 24086
Il est assis ici, attendant indéfiniment. Dans une autre window, si nous envoyons maintenant des signaux kill
, vous verrez qu'un kill -0
ne va pas tuer le process, même si le signal 0 est listé dans la command trap
.
$ kill -0 $(pgrep tr.bash) $
Cependant si on kill
le script en utilisant le signal 1, kill -1
:
$ kill -1 $(pgrep tr.bash) $
Nous verrons que le script se termine et imprime le message "salut" 2 fois. Le premier pour le signal 1 et le second parce que le script est sorti.
$ ./tr.bash PID: 24086 hi hi