
나는 bash lopp
as를 가지고있다
#!/bin/bash
for (( c=0; c<=1000000; c++ ))
do
SOME STUFF HERE
done
다음과 같은 키보드 입력으로 긴 루프를 중단 Ctrl+C
하지만 Ctrl+C
단순히 스크립트를 종료합니다. 현재 사이클을 계속하고 STUFF
현재 사이클에서 실행을 마친 후 루프를 중단할 수 있는 대안을 찾고 있습니다 .
답변1
한 가지 방법은 다음 과 같이 trap
Control-C 신호 로 break
나가는 것입니다.loop
#!/bin/bash
trap break INT
for (( c=0; c<=1000000; c++ ))
do
SOME STUFF HERE
done
echo "I have broken out of the interminably long for loop"
trap - INT
sleep 1
echo "END."
이것이 어떻게 작동하는지에 대한 자세한 내용은 다음과 같습니다.
trap break INT
그리고 또한
trap - INT
INT
"break"를 사용하여 (인터럽트, 일명 SIGINT
) 신호가 생성될 때(Ctrl+C를 누를 때 발생) 루프를 중단하기 위해 break를 실행하고 싶다고 트랩에 알립니다.
"break" 대신 임의의 쉘 명령을 따옴표로 묶을 수 있으며 이는 주어진 신호(우리의 경우 INT)가 생성될 때 실행됩니다.
-
마지막으로 "INT" 핸들러를 기본 작업으로 복원하기 위해 Trap을 다시 실행합니다 .
다음은 추가 자료와 예제를 위한 추가 리소스입니다.
- bash 트랩 명령에 관한 Linux저널 기사다양한 옵션 간의 트랩과 뉘앙스를 사용하는 몇 가지 예를 더 제공합니다.
- 함정에 대한 MIT Confluence 페이지bash 및 tcsh 쉘을 다룹니다.
- 쉘 스크립트에서 신호를 포착하고 오류를 처리하기 위해 "트랩"을 사용하는 초보자 가이드키보드로 전송된 다른 신호를 보여주는 광범위한 인용문은 물론
kill -l
모든 신호를 표시하고kill -l SIGNALNAME
해당 숫자 값을 찾는 데 사용됩니다.