在声明’陷阱’块后,Bash信号捕获未检测到变量
发布时间:2020-12-16 01:08:35 所属栏目:安全 来源:网络整理
导读:我有一堆通用的清理代码需要在某个bash脚本退出时完成,无论它是正常退出还是被中断.我想我会使用陷阱“……”EXIT伪信号来实现这一点. 除了通用的清理工作之外,还有一个特定的清理工作只有在脚本正常完成时才能完成.我想我可以通过让’trap’块测试一个变量
我有一堆通用的清理代码需要在某个bash脚本退出时完成,无论它是正常退出还是被中断.我想我会使用陷阱“……”EXIT伪信号来实现这一点.
除了通用的清理工作之外,还有一个特定的清理工作只有在脚本正常完成时才能完成.我想我可以通过让’trap’块测试一个变量来触发这个,就像这样: #!/bin/bash done=false; trap "{ #generic cleanup code goes here. if $done then #cleanup to be done only on completion goes here. echo Test; fi }" EXIT #main script goes here done=true; 但是,这不起作用.运行以下代码永远不会回显“测试”.在done = true之后添加显式的exit调用;什么都不改变.我错过了什么? 干杯!
正在插入陷阱,并且在定义陷阱时使用$done的值而不是在执行陷阱时.您可以在陷阱定义周围使用单引号,也可以定义函数.定义一个函数可能更简洁:
#!/bin/sh done=false cleanup() { if $done; then echo Test; fi; } trap cleanup EXIT done=true 这是有效的,因为函数中的变量扩展被推迟到调用函数,而不是在定义函数时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |