使用 bash 安装多个软件包

使用 bash 安装多个软件包

众所周知,我们用来安装多个包的命令是:

apt install package1 package2 package3`

在 Bash 脚本中使用以下方法:

packages="package1 package2 package3"
apt install "$packages"

会产生一个错误,说无法找到包。因此这是不正确的。

以下命令是否apt对每个包运行一次或者它的工作方式不同?

apt install $(cat $packageFile)

假如说封装文件是一个文本文件,每行包含一个包名称。

我知道我可以使用一个数组并将所有包名称放在其中,然后使用为了循环对每个包运行apt一次,但我想知道是否有办法使用 Bash 脚本安装所有包,并且apt只运行一次。

谢谢。

答案1

使用数组的方法是正确的,但您需要正确定义数组。这意味着您需要使用复合语句(即圆括号)而不是双引号。事实上,您的命令不起作用的原因首先是因为被$packagesshell 扩展为,package1 package2 package3然后被读取为单个字符串apt,而不是单独读取为package1, package2, package3

因此,使用以下形式的复合赋值定义数组:

packages=(package1 package2 package3)

然后使用以下命令安装所有软件包:

sudo apt install "${packages[@]}"

实际上,可以使用 来引用数组的任何元素${array_name[index]},并且当索引为 时@,单词将扩展为数组名称的所有成员。需要使用括号以避免与 shell 的文件名扩展运算符发生冲突。

相关内容