"일부" 트랩을 일시적으로 비활성화한 다음 다시 활성화합니다.

"일부" 트랩을 일시적으로 비활성화한 다음 다시 활성화합니다.

비활성화해야 합니다일부(모두는 아님) 트랩이 일시적으로 내 기능에 있다가 다시 활성화합니다. 하지만 이렇게 하면 예상치 못한 동작이 발생합니다(비록 트랩과 신호를 처음 접하는 사람임에도 불구하고).

function hello(){    
    cleanup(){
        echo bye!!
    }
    trap cleanup RETURN EXIT INT

    echo "hello!!"

    echo "echo hello2!!" > file2

    trap '' RETURN EXIT
    source file2
    sleep 10
    trap cleanup RETURN EXIT <-- last line
}

내가 볼 것으로 예상되는 것은 다음과 같습니다.

hello!!
hello2!!
bye!!

글쎄, 그게 내가 얻은거야. 하지만 이제 (코드 조각에 지정된) 마지막 줄을 주석 처리할 때 INT 신호에 대한 트랩을 비활성화하지 않았고 다시 활성화할 필요도 없기 때문에 여전히 동일한 출력이 나올 것으로 예상합니다. 그러나 다음과 같은 결과가 나타납니다. 이것:

hello!!
hello2!!
^C

의미는INT 트랩도 비활성화되었습니다.. 하고 trap '' RETURN EXIT있다더 많은 것들이 두 신호를 무시하는 대신? 첫 번째 경우도 예상대로 작동하고 모든 것에 대한 나의 이해가 잘못된 것 같습니다.

나는 그것을 사용하고 있습니다 GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu).

관련 정보