如何使用带有 bash 脚本的 apt-get 逐个升级软件包?

如何使用带有 bash 脚本的 apt-get 逐个升级软件包?

可以逐个升级 pkg 的 bash 脚本。我认为我们可以创建一个包含所有可升级 pkg 的 txt 文件,然后我们可以在终端中调用每一行。


答案1

你可能想尝试一下

#!/bin/bash
while read package
do
apt install ${package} -y
done < requirement.txt

您可能需要以 root 身份运行 script.sh 如果您只想在存在时进行升级,而如果不存在则不想安装它,请添加--only-upgradeapt 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

顺序为:

  1. apt-update 在终端上没有输出(如果需要,可以删除 -y 参数后面的部分)
  2. 如果有要更新的包,则将它们写入变量中。此变量是通过 awk 命令构建的,该命令首先只获取 / 字符之前的数据,然后删除数据块的第一行(它没用)
  3. 该变量在 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

相关内容