如何注释掉保存在文本文件中的软件包名称以进行批量安装?

如何注释掉保存在文本文件中的软件包名称以进行批量安装?

我正在从“packages.txt”(或您喜欢的名称)批量安装 apt-get 软件包,如下所述使用文件通过 apt-get 安装软件包

注释掉“终结者”apt包:

iceweasel
#terminator
vim

抛出错误:

The command '/bin/sh -c xargs -a /tmp/packages.txt apt-get install -y' returned a non-zero code: 123

相反,如果您为 Python 填写“requirements.txt”,而不是像此处在 Dockerfile 中那样,它会忽略以#.

RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r /tmp/requirements.txt

与“requirements.txt”:

python3-pip
mysql-client
#mysql-server
libmysqlclient-dev
python3-dotenv

结果:mysql-server被跳过。

我如何在“packages.txt”中注释掉 apt 包?

答案1

在将包发送到之前过滤包列表xargs

grep -v '^#' /tmp/packages.txt | xargs -r sudo apt-get install -y

添加-rxargs调用可确保在packages.txt注释掉所有行时不会发生任何情况。

答案2

如果您想逃避纯文本文件的处理packages.txt,我开发了sysdep工具就是为了这个目的。它是一个简单的工具,可以从toml文件而不是纯文本文件中读取。这使得toml类似于aptpyproject.toml.cargo.toml

  1. 下载与

    curl -L https://github.com/Benjamin-Tan/sysdep/releases/latest/download/sysdep-$(arch)-unknown-linux-gnu.tar.gz | tar -xz -C ~/.local/bin
    
  2. 创建一个system_dependencies.toml

    [dependencies]
    apt = ["libpackage", "libpackage2"]
    
  3. sysdep list要列出依赖项,应显示“libpackage”、“libpackage2”。

  4. sysdep install安装它们

  5. sysdep显示更多选项的帮助页面。

相关内容