트랩 명령의 신호 0은 무엇입니까?

트랩 명령의 신호 0은 무엇입니까?

나는 후속 조치를 취하고 있다이 가이드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

~에서배쉬 매뉴얼:

trap [-lp] [[arg] sigspec ...]

...sigspec이 EXIT(0)인 경우 쉘을 종료할 때 arg 명령이 실행됩니다.

답변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이 명령에 나열되어 있어도 killa가 프로세스를 종료하지 않는다는 것을 알 수 있습니다 .kill -0trap

$ 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

이것저것 많이 만들어

출구

트랩 끝에 있는 출구는 청소 시 올바른 상태로 쉘을 종료합니다.

관련 정보