apt-get 从文件中批量安装软件包?

47 apt

我有一个包含很多包名的文本文件。

package1
package2

# comment
# installing package3 because it was needed for...
package 3

package 4
Run Code Online (Sandbox Code Playgroud)

如何在不删除注释的情况下批量安装文本文件中的所有软件包?

and*_*dol 48

沿着这些路线的东西应该可以解决问题。

apt-get install $(grep -vE "^\s*#" filename  | tr "\n" " ")
Run Code Online (Sandbox Code Playgroud)

$(something) 构造运行something命令,将其输出插入命令行。

grep 命令将排除任何以 # 开头的行,可选地允许在它之前有空格。然后 tr 命令用空格替换换行符。

  • `tr` 将因多字节行尾序列而失败(想想 `\r\n`),你为什么不使用 `xargs`? (5认同)

Six*_*Six 17

以下命令是对替代方案的(轻微)改进,因为sudo apt-get install当包列表为空时不执行。

xargs -a <(awk '! /^ *(#|$)/' "$packagelist") -r -- sudo apt-get install
Run Code Online (Sandbox Code Playgroud)

请注意,该-a选项直接从文件而不是标准输入中读取项目。我们不想通过管道将文件导入,xargs因为 stdin 必须保持不变以供apt-get.


cmc*_*nty 6

给定一个包列表文件package.list,尝试:

sudo apt-get install $(awk '{print $1'} package.list)
Run Code Online (Sandbox Code Playgroud)