다음 스크립트가 있습니다
#! /usr/bin/bash
trap "{ echo bye ;}" SIGINT
while :
do
echo "Hello"
done
Ctrl-를 누르면 Cwhile 루프가 중지되지 않고 echo bye
실행되지 않습니다.
다음과 같은 경우에도 같은 일이 발생합니다.
#! /usr/bin/bash
trap "{ echo bye ;}" SIGINT
while echo -n ""
do
echo "Hello"
done
SIGINT
트랩이 신호를 무시하는 이유는 무엇입니까 ?
답변1
실행 되지만 echo bye
볼 수는 없습니다. 이것을 while 루프에 추가하면 sleep 0.5
볼 수 있습니다.
trap
Ctrl/C를 사용했기 때문에 while 루프가 중지되지 않습니다 . 코드를 종료하려면 exit
다음 명령을 추가해야 합니다.trap
#!/bin/bash
#
gotcha()
{
echo "Bye"
exit 1
}
trap gotcha SIGINT
while :
do
echo "Hello"
sleep 0.5
done
이 기능에 대해 알아야 할 매우 중요한 점 중 하나 trap
는 스크립트의 현재 명령(그것이 무엇이든)이 실행을 완료할 때까지 실행되지 않는다는 것입니다. 따라서 장기 실행 명령을 중단하는 데 반드시 이를 사용할 필요는 없습니다.