我需要帮助制作一个特定的 bash 函数。
下面是我想在终端中执行的操作的一个例子:
- 运行命令
apt-get update
(在后台运行,无输出) - 然后仅回显
urls
列表中更新的内容(不是 Hit: 1、Hit: 2 等...)
所以基本上我需要一个 bash 脚本来查找特定的东西,例如“Hit: 1、Hit: 2 等”,然后在列表中输出之后的内容。
PS:这只是一个理论上的例子。这些网址对我来说没有任何用处。
答案1
您可以使用--print-uris
apt-get 命令的参数仅输出更新包的 URI。例如:
sudo apt-get --print-uris update
将输出 tarball 和 .xz 档案的列表。但该列表非常不干净,具有以下一般格式。
'http://archive.ubuntu.com/ubuntu/dists/xenial-backports/multiverse/dep11/icons-64x64.tar.xz' archive.ubuntu.com_ubuntu_dists_xenial-backports_multiverse_dep11_icons-64x64.tar 0
但是,只需使用以下简单的正则表达式即可清理输出,egrep
该正则表达式可用于匹配任何文件的 URL 直接静态链接。
sudo apt-get -y --print-uris update | egrep -o -e egrep -o -e "(ht|f)tp://[^\']+"
为了把它变成一个函数,
updateURIonly(){
sudo apt-get -y --print-uris update | egrep -o -e egrep -o -e "(ht|f)tp://[^\']+" ;
}
upgrade
您还可以使用它来输出和/或参数的包的 URI,dist-upgrade
以及可以传递给 apt-get 命令的任何其他参数。
为了使这个论点发挥作用upgrade
:
upgradeURIonly(){
sudo apt-get -y --print-uris upgrade | egrep -o -e egrep -o -e "(ht|f)tp://[^\']+" ;
}
您可以使用此输出中的 URI 执行快速升级,方法是使用本质上更快的多线程下载程序(如axel
an/or)aria2c
。我的 github 上有一个脚本,它正是执行此操作。即,它使用上面显示的方法提取 URI 列表并下载软件包.deb
以执行非常快速的升级。速度提高了 40 倍。请注意我的脚本使用,axel
因此请确保axel
在运行脚本之前已安装。
克隆我的 github repo: