나 bash lopp
한테는 AS가 있어
#!/bin/bash
for (( c=0; c<=1000000; c++ ))
do
SOME STUFF HERE
done
키보드 입력으로 긴 루프를 중단했지만 Ctrl+C
스크립트 Ctrl+C
가 종료되었습니다. 현재 루프를 계속하고 STUFF
현재 루프에서 실행이 완료된 후 루프를 중단할 수 있는 대안을 찾고 있습니다 .
답변1
한 가지 방법은 다음과 같이 Control-C를 사용하여 trap
신호를 보내고 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"를 사용하여 (break, 일명 SIGINT
) 신호가 생성될 때(Ctrl+C를 누를 때 발생함) break를 실행하여 루프를 중단하고 싶다고 트랩에 알립니다 .
"break" 대신 따옴표로 쉘 명령을 넣을 수 있으며 주어진 신호(우리의 경우 INT)가 생성될 때 실행됩니다.
마지막으로 트랩을 다시 실행하여 -
"INT" 핸들러를 기본 작업으로 복원합니다.
다음은 추가 자료를 위한 몇 가지 리소스와 예입니다.
- bash 트랩 명령에 관한 Linuxjournal 기사트랩 사용에 대한 더 많은 예와 다양한 옵션 간의 뉘앙스를 제공합니다.
- 트랩에 관한 MIT Confluence 페이지bash 및 tcsh 쉘을 다룹니다.
- 쉘 스크립트에서 신호를 포착하고 오류를 처리하기 위해 "트랩"을 사용하는 초보자 가이드참조 자료에는 키보드에서 전송된 기타 신호뿐만 아니라
kill -l
모든 신호를 표시하고kill -l SIGNALNAME
해당 값을 찾는 사용법이 광범위하게 표시됩니다.