可以逐个升级 pkg 的 bash 脚本。我认为我们可以创建一个包含所有可升级 pkg 的 txt 文件,然后我们可以在终端中调用每一行。
答案1
你可能想尝试一下
#!/bin/bash
while read package
do
apt install ${package} -y
done < requirement.txt
您可能需要以 root 身份运行 script.sh 如果您只想在存在时进行升级,而如果不存在则不想安装它,请添加--only-upgrade
(apt install --only-upgrade ${package} -y
)
答案2
xargs
允许您从文件中读取包:
$ xargs -a package.txt -n 1 apt -y install
答案3
我有一个 ubuntu 后安装程序脚本,每次全新安装 ubuntu 时都会使用它。我写了一些接近您要求的内容,因为它可用于自定义终端中的输出。该脚本是:
echo "Reading package list..."
apt-get update -y >/dev/null 2>&1
PKG_LIST="$(apt list -u | awk 'BEGIN {FS="/"} {print $1}' | awk NR\>1)"
for PKG_NAME in $PKG_LIST;
do
echo "$PKG_NAME is ready for update..."
if apt-get install "$PKG_NAME" -y >/dev/null 2>&1;
then
echo "$PKG_NAME updated"
else
echo "WARNING: $PKG_NAME cannot be updated"
fi
done
顺序为:
- apt-update 在终端上没有输出(如果需要,可以删除 -y 参数后面的部分)
- 如果有要更新的包,则将它们写入变量中。此变量是通过 awk 命令构建的,该命令首先只获取 / 字符之前的数据,然后删除数据块的第一行(它没用)
- 该变量在 for 循环中逐项进行分析,并且针对每一项运行 apt install。
使用此代码,您无需将可升级包放在文本文件中,它们会在“运行时”检索
如果您想从文件中读取,修改很容易:
echo "Building list.txt"
PKG_LIST="$(apt list -u | awk 'BEGIN {FS="/"} {print $1}' | awk NR\>1)"
echo "${PKG_LIST}" > list.txt
echo "Reading package list..."
while read PKG_NAME;
do
echo "$PKG_NAME is ready for update..."
if apt-get install "$PKG_NAME" -y >/dev/null 2>&1;
then
echo "$PKG_NAME updated"
else
echo "WARNING: $PKG_NAME cannot be updated"
fi
done < list.txt
答案4
在一行命令中(在 sudo su 中):
apt list -u -q 2>/dev/null | grep "/" | cut -d/ -f1 | xargs -n 1 apt -y install