暂时禁用“某些”陷阱,然后重新启用它们

暂时禁用“某些”陷阱,然后重新启用它们

我需要禁用一些(不是全部)陷阱暂时在我的功能中,然后重新激活它们。但是当我这样做时,我得到了意想不到的行为(尽管我对陷阱和信号还很陌生):

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)

相关内容