임시 파일 없이 트랩 복원
-
09-12-2019 - |
문제
인수 없이 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
.
제휴하지 않습니다 StackOverflow