trap
bash 스크립트에서는 설정할 수 있지만 bash 함수 는 설정할 수 없습니다.
예를 들어, source
아래 코드를 실행 f
하고 이제 Ctrl+를 시도 C하면 갇히지 않았습니다!
trap
bash 함수에서 설정하는 방법 ?
4 trap ctrl_c INT
5
6 ctrl_c () {
7 echo "** Trapped CTRL-C"
8 }
9
10
11 f () {
12 for i in `seq 1 100`; do
13 sleep 1
14 echo -n "."
15 done
16 }
답변
왜냐하면 bash
스크립트를 실행하는 대신 SIGINT를 포 그라운드의 프로세스로 전송하기 때문 입니다. 이 작업을 수행하려면 함수를 비동기로 만든 다음 사용하십시오 wait
(예상대로 작동하고 트랩을 사용함).
답변
Protip : 프로세스 A가와 QUIT 전경을 보내기 Ctrl– \때 Ctrl– C, –Z , – D작동하지 않습니다.
실행 종료시 트랩 제거 trap - list of signals here
비 프로덕션 시스템에서의 재미 : 모든 합리적인 신호 (예 : KILL 아님)에 대한 트랩을 설정하십시오. kill -l
(이것은 소문자 L이 숫자 1이 아니거나 파이프 |가 아닙니다)
답변
함수를 전역으로 만들어야한다고 생각합니다.
#!/bin/bash
trap ctrl_c INT
ctrl_c () {
echo "** Trapped CTRL-C"
}
for i in `seq 1 100`; do
sleep 1
echo -n "."
done