나는 데비안과 리눅스에서 bash 스크립트를 자주 실행합니다.
우리 모두는 CTRL + C 키 조합이 현재 프로그램을 중단하고 실행 파일/스크립트를 닫을 수 있다는 것을 알고 있지만, 이 키 입력은 배치/스크립트를 완전히 종료합니다.
내가 찾고 있는 것은 키 입력입니다매우 실용적인 단락에 대해서만 건너뛰기(중첩된 CTRL+C 등)단락을 실행하지 않더라도 for 루프의 "break" 및 "continue"와 마찬가지로 오류 조건이 발생합니다.
예시 스크립트:
데모 파일
wget http://something_from_the_internet...
unzip that_file
ping my_host
4th passage...
5th passage...
키 조합을 눌러 두 번째 명령(이 경우 압축 풀기)으로 이동하거나, 두 번 누르고 세 번째 명령(이 경우 ping...)으로 바로 이동하고 싶습니다.
많은 경우 스크립트 파일의 결과는 모든 단락에 의해 제공됩니다. 그러나 제 경우에는 그렇지 않습니다. 테스트 목적으로 이러한 조합을 사용하면 상단의 모든 줄에 주석을 달지 않고도 콘텐츠를 실행하고 테스트할 수 있습니다. 하단에서 최신 정보를 간단히 살펴보세요.
답변1
답변2
SIGINT
Bash의 내장 기능을 사용하여 선택적으로 신호를 포착할 수 있습니다 trap
.
trap [COMMANDS] [SIGNALS]
예를 들어, SIGINT
포그라운드 스크립트로 전송된 신호를 캡처하여 스크립트에서 생성된 프로세스로 신호를 보낼 수 있습니다.
그러나 이 경우 포크된 프로세스의 PID가 필요합니다. Bash의 변수를 사용할 수 있지만 $!
이는 백그라운드로 분기된 프로세스에서만 작동합니다.
해결 방법으로 스크립트의 동기 특성을 유지하려면 wait
반환된 PID를 명시적으로 호출할 수 있습니다.
#!/usr/bin/env bash
function skip() {
kill -SIGTERM $!
}
trap skip SIGINT
ping ... &
wait $!
wget ... &
wait $!
unzip ... &
wait $!