bash 함수에서 트랩을 설정하는 방법은 무엇입니까? 없습니다. 예를 들어, source아래 코드를 실행 f하고

trapbash 스크립트에서는 설정할 수 있지만 bash 함수 는 설정할 수 없습니다.

예를 들어, source아래 코드를 실행 f하고 이제 Ctrl+를 시도 C하면 갇히지 않았습니다!

trapbash 함수에서 설정하는 방법 ?

  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\CtrlC, –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


답변