add-apt-repository 不支持源列表中的 glob 吗?

oli*_*ren 1 package-management apt repository add-apt-repository

我通常添加这样的存储库:

add-apt-repository --no-update --yes "deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable"
Run Code Online (Sandbox Code Playgroud)

这工作正常,在设置 Ubuntu 机器时,我运行一个设置脚本,该脚本循环遍历存储库列表并使用该命令添加它们。

问题是,当遇到这种格式的存储库源时,它会失败:

deb [signed-by=/etc/apt/trusted.gpg.d/repo.charm.sh.gpg] https://repo.charm.sh/apt/ * *
Run Code Online (Sandbox Code Playgroud)

然后它就会失败并显示Unable to handle repository shortcut 'deb [signed-by=/etc/apt/trusted.gpg.d/repo.charm.sh.gpg] https://repo.charm.sh/apt/ * *'.

当然,我可以解决这个特殊情况,按照文档的说明进行操作,然后将内容粘贴到文件中,但如果东西正常工作,我就不必这样做。那么,在使用实用程序命令时,我是否无法正确处理格式,或者由于内部解析位中缺少功能而无法识别它?如果没有,我该怎么做才能让它不失败?

mur*_*uru 5

实际上并不是*一个 glob,而只是一个*.

然而,这不是问题所在。add-apt-repository使用的Python 库python-apt(由 的开发人员维护apt)不支持除源代码行archtrusted选项之外的任何内容。

来自v2.5.0 版本的源代码

if pieces[1].strip()[0] == "[":
    options = pieces.pop(1).strip("[]").split()
    for option in options:
        try:
            key, value = option.split("=", 1)
        except Exception:
            self.invalid = True
        else:
            if key == "arch":
                self.architectures = value.split(",")
            elif key == "trusted":
                self.trusted = apt_pkg.string_to_bool(value)
            else:
                self.invalid = True
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以自己写入文件:

printf "%s\n" 'deb [signed-by=/etc/apt/trusted.gpg.d/repo.charm.sh.gpg] https://repo.charm.sh/apt/ * *' | sudo tee /etc/apt/sources.list.d/charm.list
Run Code Online (Sandbox Code Playgroud)