나는 후속 조치를 취하고 있다이 가이드ssh-agent를 사용하여 비밀번호 없는 SSH 인증을 설정하는 방법에 대해 설명합니다.
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 시그널그런 신호가 없습니다.
이것은 단지 오타나 오류인가요? 아니면 실제로 뭔가를 달성한 것인가요?
답변1
답변2
@Mat가 답변에 표시된 것처럼 명령에 SIGSPEC 0을 사용하면 스크립트가 종료될 때 명령이 실행 trap
됩니다 .trap
이 예는 어떤 일이 일어나는지 보여줍니다.
$ cat tr.bash
#!/bin/bash
echo "PID: $$"
trap 'echo hi; exit 1' 0 1 2 15
while [ 1 ]; do
sleep 3
done
이것을 실행하면:
$ ./tr.bash
PID: 24086
그것은 여기 앉아서 무한정 기다리고 있습니다. 다른 창에서 이제 신호를 보내면 신호 0이 명령에 나열되어 있어도 kill
a가 프로세스를 종료하지 않는다는 것을 알 수 있습니다 .kill -0
trap
$ kill -0 $(pgrep tr.bash)
$
그러나 kill
신호 1을 사용하여 스크립트를 작성 하면 다음과 같습니다 kill -1
.
$ kill -1 $(pgrep tr.bash)
$
스크립트 종료를 확인하고 "hi" 메시지를 두 번 인쇄합니다. 첫 번째는 신호 1을 위한 것이고 두 번째는 스크립트 종료를 위한 것입니다.
$ ./tr.bash
PID: 24086
hi
hi
답변3
쉘이 종료될 때 0의 트랩이 실행됩니다. 일반적으로 항상 실행되는 한 곳에서 tmp 파일을 정리하는 데 사용됩니다.
tmp=/tmp/myscript.$$
트랩 'rm -f $tmp;exit'0 1 2 15
이것저것 많이 만들어
출구
트랩 끝에 있는 출구는 청소 시 올바른 상태로 쉘을 종료합니다.