Postępuję zgodnie z tym przewodnikiem, jak skonfigurować uwierzytelnianie SSH bez hasła za pomocą ssh-agent.
Aby uruchomić ssh-agent, autor zaleca następujący kod w .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
Nie rozumiem, dlaczego to sygnał pułapki 0. Według sygnału człowieka 7 takiego sygnału nie ma.
Czy to tylko literówka lub błąd, czy naprawdę coś to osiąga?
0
powłokitrap
. Wysyłając sygnał za pomocąkill
, liczba 0 oznacza w końcu, że nie należy wysyłać sygnału; jest to sposób na sprawdzenie istnienia procesu docelowego.trap -l
!Jak pokazuje @Mat w swojej odpowiedzi, SIGSPEC równy 0, gdy zostanie użyty w
trap
poleceniu, spowoduje uruchomienietrap
polecenia po zakończeniu skryptu.Ten przykład ilustruje, co się dzieje.
Kiedy to uruchomimy:
Siedzi tutaj i czeka w nieskończoność. W innym oknie, jeśli teraz wyślemy
kill
do niego sygnały, zobaczysz, że akill -0
nie zabije procesu, nawet jeśli sygnał 0 jest wymieniony wtrap
poleceniu.Jednak jeśli mamy
kill
skrypt za pomocą sygnału 1kill -1
:Zobaczymy, że skrypt kończy działanie i wypisuje komunikat „cześć” 2 razy. Pierwszy dla sygnału 1, a drugi, ponieważ skrypt zakończył działanie.
źródło
pułapka na 0 jest uruchamiana po wyjściu powłoki. Jest powszechnie używany do czyszczenia plików tmp w jednym miejscu, które jest zawsze wykonywane:
wyjście na końcu pułapki wychodzi ze skorupy podczas czyszczenia o odpowiednim statusie.
źródło