【问题标题】:How do I prevent apt/apt-get from cancellng download of multiple packages if one of them can't be found如果找不到其中一个包,如何防止 apt/apt-get 取消下载多个包
【发布时间】:2021-04-29 03:46:54
【问题描述】:

我正在尝试为 Ubntu 编写一个包安装脚本,它基于 apt-get,并以包列表作为参数(如 xargs -a ./packages_list.txt sudo apt-get -y -f -m installsudo apt-get -y -f -m install $(cat packages_list.txt))。

apt 可能找不到 packages_list.txt 列表中的某个包。在这种情况下,应忽略该软件包,但应安装所有其他软件包。

所以我的期望是从命令sudo apt-get -y -f -m install curl wget apt-transport-https xargs dos2unix vim 可以看出,如果 apt、curl、wget、apt-transport-https、dos2unixvim 无法找到/下载 xargs 仍然安装。

但实际上发生了什么,我收到消息(德语)E: xargs kann nicht gefunden werden.(“E: xargs can't be found.”)和列表的其余部分,例如apt-transport-https,未安装。

我的理解是,-m(或--ignore-missing)应该防止这种行为。但事实并非如此。

那么我怎样才能实现 apt 参数列表中的所有其他包仍然被安装?

【问题讨论】:

    标签: list installation apt apt-get


    【解决方案1】:

    while read 循环将列表中的软件包按一个安装:

    export DEBIAN_FRONTEND=noninteractive
    while IFS= read -r package; do sudo apt -y install "$package"; done < packages_list.txt
    

    如果某些软件包安装失败,安装过程将继续。

    不循环:

    xargs apt list 2>/dev/null < packages_list.txt | \
    awk -F'/' '/\//{print $1}' | xargs sudo apt install -y
    

    【讨论】:

    • 这是一个可行的解决方案。谢谢!当然,如果有一个解决方案而不在循环中调用 apt 作为工作循环,那就太好了。
    • @gth3q 我已经更新了我的答案,第一个命令将检查并过滤可用的包,第二个命令将安装它们。
    • 两种解决方案都很棒。感谢您的帮助!
    猜你喜欢
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    相关资源
    最近更新 更多