我正在从“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
添加-r
到xargs
调用可确保在packages.txt
注释掉所有行时不会发生任何情况。
答案2
如果您想逃避纯文本文件的处理packages.txt
,我开发了sysdep
工具就是为了这个目的。它是一个简单的工具,可以从toml
文件而不是纯文本文件中读取。这使得toml
类似于apt
、pyproject.toml
.cargo.toml
下载与
curl -L https://github.com/Benjamin-Tan/sysdep/releases/latest/download/sysdep-$(arch)-unknown-linux-gnu.tar.gz | tar -xz -C ~/.local/bin
创建一个
system_dependencies.toml
[dependencies] apt = ["libpackage", "libpackage2"]
sysdep list
要列出依赖项,应显示“libpackage”、“libpackage2”。sysdep install
安装它们sysdep
显示更多选项的帮助页面。