첫 번째 스크립트에서 +를 누르면 Ctrl예상대로 작동하지만 +는 효과가 없습니다.CCtrlC
#!/bin/bash
trap '' INT
ssh user@server 'svn checkout ...'
echo "done"
그러나 두 번째 스크립트에서는 Ctrl+ C어떻게든 SSH 연결을 종료하고 스크립트의 다음 부분을 계속 진행합니다.
#!/bin/bash
trap 'echo "message"' INT
ssh user@server 'svn checkout ...'
echo "done"
Ctrl내 생각 에 두 번째 스크립트에서는 CSSH 연결을 종료하지 않고 "메시지"를 콘솔에 인쇄해야 한다고 생각합니다. 왜 이런 일이 발생합니까? 종료하지 않고 +를 누를 때마다 Ctrl일부 메시지를 인쇄할 수 있습니까?Cssh
답변1
내부는 ''
매우 특별해요 trap '' <signame>
. 결과 는 <signame>
다음과 같습니다무시당하다, 가상 핸들러에 바인딩되지 않았습니다.
신호의 "무시" 처리는 자식 프로세스(예: ssh를 통해)에 상속되지만 신호 처리기에는 상속되지 않습니다.
trap '' INT
trap true INT
와 다르거나 다릅니다 trap ' ' INT
.
help trap
이것은 bash에서 다음과 같은 내용을 알려줍니다.
의
ARG
경우빈 문자열모두SIGNAL_SPEC
가무시당하다쉘과 쉘이 호출하는 명령을 통해.
실제로 수행하려는 작업을 말하기는 어렵지만 명령을 종료 하지 않고 Ctrl- 키를 눌렀을 때 스크립트에서 메시지를 인쇄하도록 하려면 다음을 수행할 수 있습니다.Cssh
#!/bin/bash
trap 'echo "message"' INT
ssh user@server 'svn checkout ...' &
while :; do
wait
s=$?
case $s in
130) ;;
129|13?) kill -n "$((s - 128))" "$$";;
*) exit "$s";;
esac
done
echo "done"
- ( )를 통해 스크립트를 종료할 수 있으려면 ssh ... &
으로 변경하십시오.(trap - QUIT; trap '' INT; exec ssh ...) &
Ctrl\SIGQUIT