Я следую этому руководству о том, как настроить SSH-аутентификацию без пароля с помощью ssh-agent.
Для запуска ssh-agent автор рекомендует следующий код в .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
Я не понимаю, почему это сигнал захвата 0. По сигналу человека 7 такого сигнала нет.
Это просто опечатка или ошибка, или это действительно чего-то добиться?
0
shelltrap
. При отправке сигнала сkill
номером 0 означает, что сигнал не отправляется в конце концов; это способ проверки существования целевого процесса.trap -l
!Как показывает @Mat в своем ответе, SIGSPEC, равный 0, при использовании в
trap
команде вызовет выполнениеtrap
команды при выходе из сценария.Этот пример иллюстрирует, что происходит.
Когда мы запустим это:
Он сидит здесь в ожидании бесконечно. В другом окне, если мы сейчас отправим ему
kill
сигналы, вы увидите, что akill -0
не убьет процесс, даже если вtrap
команде указан сигнал 0 .Однако если мы
kill
используем сценарий, использующий сигнал 1kill -1
:Мы увидим, что скрипт завершает работу и печатает сообщение «привет» 2 раза. Первый для сигнала 1, а второй из-за выхода из сценария.
источник
ловушка на 0 запускается при выходе из оболочки. Обычно он используется для очистки файлов tmp в одном месте, которое всегда выполняется:
выход в конце ловушки выходит из оболочки при очистке с правильным статусом.
источник