You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:45:38