trap
bash 스크립트에서는 설정할 수 있지만 bash 함수에서는 설정할 수 없습니다.
source
아래 코드를 가져 와서 실행하세요 f
. 이제 Ctrl+를 시도해 보세요 C. 멈추지 않습니다!
Bash 기능에서 어떻게 trap
설정하나요?
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 }
답변1
bash
이는 실행 중인 스크립트 대신 SIGINT를 포그라운드 프로세스로 보내기 때문입니다 . 이렇게 하려면 함수를 비동기로 만든 다음 사용하세요 wait
(이것은 예상대로 작동하고 트랩을 사용합니다).
답변2
전문가 팁: - , - , - 가 작동하지 않을 때 CtrlQUIT를 포그라운드 프로세스로 보내려면 -를 사용하세요.\CtrlCZD
실행이 끝나면 트랩을 제거합니다.trap - list of signals here
비프로덕션 시스템에서의 재미: 모든 민감한 신호에 대해 트랩을 설정해 보십시오(예: KILL 아님). kill -l
(소문자 L, 숫자 1 또는 파이프 |가 아님)
답변3
함수를 전역으로 만들어야 한다고 생각합니다.
#!/bin/bash
trap ctrl_c INT
ctrl_c () {
echo "** Trapped CTRL-C"
}
for i in `seq 1 100`; do
sleep 1
echo -n "."
done