문제

인수 없이 trap 모든 트랩에 대해 현재 설정된 명령을 인쇄합니다.그러나 서브쉘은 트랩을 상속하지 않으므로 트랩 저장 및 복원에 대한 표준 예제는 bash에서 실패합니다.

save_traps=$(trap)
...
eval "$save_traps"

할당의 RHS에 대한 트랩은 하위 쉘에서 실행되므로 save_traps는 항상 빈 문자열입니다.출력을 작성하는 것 외에 trap 임시 파일로 전송하는 경우 스크립트가 트랩에 대한 현재 명령 세트를 어떻게 찾을 수 있습니까?

도움이 되었습니까?

해결책

나를 위해 작동합니다.

샘플 트랩 만들기 :

$ trap
$ trap echo SIGIO
$ trap
trap -- 'echo' SIGIO
.

트랩을 save_traps에 저장합니다.

$ save_traps=$(trap)
.

제거 :

$ trap SIGIO
$ trap | wc -l
   0
.

복원 :

$ eval "$save_traps"
$ trap
trap -- 'echo' SIGIO
.

테스트 :

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.
.

다른 팁

Bash 맨페이지에는 트랩이 서브셸에서 재설정되고 명령 대체가 서브셸에서 실행된다고 나와 있는 것처럼 보이지만 다음을 실행합니다. trap 내부에 $() 어쨌든 작동합니다(Bash 3.2 및 4.2에서 테스트됨).POSIX에서도 다음과 같이 언급되어 있습니다. traps=$(trap) 작동해야합니다.

덕분에 pgas ~에 #bash ~에 irc.freenode.net.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top