Bash 기능에서 트랩을 설정하는 방법은 무엇입니까?

Bash 기능에서 트랩을 설정하는 방법은 무엇입니까?

trapbash 스크립트에서는 설정할 수 있지만 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

관련 정보