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

如何使用Python动态修改bash脚本内dockerversion变量并完成版本更新

解决方案

首先安装依赖包:

pip install requests packaging

以下是修正后可直接运行的完整代码:

import requests
import re
import subprocess
from packaging.version import parse

# 拉取Vaultwarden最新发布版本
url = 'https://github.com/dani-garcia/vaultwarden/releases/latest'
r = requests.get(url, allow_redirects=True)
latest_version = r.url.split('/')[-1].lstrip('v')  # 去掉版本号前可能带的v前缀,统一格式

# 读取本地bash脚本全部内容,匹配当前存储的版本
bash_file_path = 'vaultwarden-update'
current_version = None
file_content = []
with open(bash_file_path, 'r', encoding='utf-8') as f:
    for line in f:
        file_content.append(line)
        # 匹配dockerversion变量行
        if line.strip().startswith('dockerversion='):
            current_version = re.sub(r'^dockerversion=', '', line.strip()).lstrip('v')

# 校验版本读取结果
if not current_version:
    raise Exception("未在bash脚本中找到dockerversion变量")

# 版本对比,仅当最新版本大于当前版本时执行更新
if parse(latest_version) > parse(current_version):
    # 遍历全部内容,仅替换dockerversion行的值
    new_content = []
    for line in file_content:
        if line.strip().startswith('dockerversion='):
            new_content.append(f"dockerversion={latest_version}\n")
        else:
            new_content.append(line)
    # 写入修改后的内容到原文件
    with open(bash_file_path, 'w', encoding='utf-8') as f:
        f.writelines(new_content)
    # 执行bash更新脚本
    subprocess.run(['bash', bash_file_path], check=True)

关键调整说明

  • 去掉了硬编码的行号匹配逻辑,改用正则匹配dockerversion=开头的行,无论bash脚本后续怎么修改结构,都能准确定位到要修改的变量,不会出错
  • 引入专业的语义化版本解析工具做版本对比,避免直接字符串对比出现的1.29.2 < 1.3.0这类逻辑错误
  • 保留原脚本所有内容,仅修改dockerversion变量的取值,其余内容完全不变
  • 增加了版本读取校验逻辑,避免脚本找不到变量时报错无提示
  • 新增了更新后的bash脚本自动执行逻辑,不需要手动再调用

注意事项

  • 运行Python脚本的用户需要有vaultwarden-update文件的读写权限,以及执行docker命令的权限
  • 如果你的版本号习惯带v前缀(比如v1.29.2),可以删掉代码中.lstrip('v')的逻辑即可适配

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:03