如何在docker_login函数执行结束后删除docker-credstore-lock.lock文件?
最优实现方案
核心思路
在docker_login函数内部设置信号捕获,专门处理INT(Ctrl+C)和EXIT信号,同时在函数执行完成后重置trap,避免干扰脚本其他逻辑。
具体实现
修改docker_login函数的定义,加入以下逻辑:
docker_login() { # 定义锁文件路径为局部变量,避免全局污染 local LOCK_FILE="/var/tmp/docker-credstore-lock.lock" # 定义清理锁文件的函数 cleanup() { rm -f "$LOCK_FILE" # 重置信号捕获,避免影响后续脚本逻辑 trap - INT EXIT } # 设置信号捕获:Ctrl+C中断或函数退出时触发清理 trap cleanup INT EXIT # 原函数逻辑:创建锁文件、执行docker登录操作 touch "$LOCK_FILE" # ... 这里写入原本的docker登录相关代码 ... # 函数正常结束时主动调用清理(增强可靠性) cleanup }
关键说明
- 局部变量:用
local声明锁文件路径,防止全局变量冲突。 - 双信号捕获:同时监听
INT(Ctrl+C)和EXIT信号,覆盖主动退出、强制中断两种场景。 - 重置trap:清理函数内通过
trap - INT EXIT恢复默认信号处理,避免后续脚本的信号行为被意外修改。 - 主动清理:函数正常执行完毕后主动调用清理函数,确保极端场景下锁文件也能被删除。
补充:无法修改docker_login函数的场景
如果因权限或其他限制不能修改目标函数,可在调用它的外层包裹信号处理逻辑:
LOCK_FILE="/var/tmp/docker-credstore-lock.lock" cleanup() { rm -f "$LOCK_FILE" trap - INT EXIT } # 调用前设置信号捕获 trap cleanup INT EXIT # 执行目标函数 docker_login # 执行完成后主动清理并重置trap cleanup
内容的提问来源于stack exchange,提问作者Chamila Wijayarathna
相关产品推荐
相关产品推荐

