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