![apt 以编程方式检测更新后的可升级软件包](https://linux22.com/image/1168409/apt%20%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E6%A3%80%E6%B5%8B%E6%9B%B4%E6%96%B0%E5%90%8E%E7%9A%84%E5%8F%AF%E5%8D%87%E7%BA%A7%E8%BD%AF%E4%BB%B6%E5%8C%85.png)
运行时apt-get update
,它会下载软件包列表,如果有可升级的软件包,它会输出类似
1 package can be upgraded. Run 'apt list --upgradable' to see it.
我可以解析输出以查找“可以升级”或类似内容,但必须有一种更优雅的方法来知道更新后是否有可以升级的软件包。
我注意到,apt-get update
下载数据后,它几乎立即输出这些信息,而如果我运行apt list --upgradeable
它,则需要很长时间,大概是因为它不只是告诉我有多少个包,而是继续生成一个完整的包列表,而我并不需要这个列表。我只需要快速知道是否有任何包需要更新。
注意:需要使用编程接口来执行此操作的答案是可以接受的
答案1
完成sudo apt update
... 之后,列出项目所需的时间很短。
例子: (我忘了在第一个中添加“时间”)...
$ apt 列表--可升级 列表...完成 libpython2.7/xenial-security 2.7.12-1ubuntu0~16.04.9 amd64 [可从 2.7.12-1ubuntu0~16.04.8 升级] libpython2.7-dev/xenial-security 2.7.12-1ubuntu0~16.04.9 amd64 [可从 2.7.12-1ubuntu0~16.04.8 升级] libpython2.7-minimal/xenial-security 2.7.12-1ubuntu0~16.04.9 amd64 [可从 2.7.12-1ubuntu0~16.04.8 升级] libpython2.7-stdlib/xenial-security 2.7.12-1ubuntu0~16.04.9 amd64 [可从 2.7.12-1ubuntu0~16.04.8 升级] libpython3.5/xenial-security 3.5.2-2ubuntu0~16.04.9 amd64 [可从 3.5.2-2ubuntu0~16.04.8 升级] libpython3.5-dev/xenial-security 3.5.2-2ubuntu0~16.04.9 amd64 [可从 3.5.2-2ubuntu0~16.04.8 升级] libpython3.5-minimal/xenial-security 3.5.2-2ubuntu0~16.04.9 amd64 [可从 3.5.2-2ubuntu0~16.04.8 升级] libpython3.5-stdlib/xenial-security 3.5.2-2ubuntu0~16.04.9 amd64 [可从 3.5.2-2ubuntu0~16.04.8 升级] python2.7/xenial-security 2.7.12-1ubuntu0~16.04.9 amd64 [可从 2.7.12-1ubuntu0~16.04.8 升级] python2.7-dev/xenial-security 2.7.12-1ubuntu0~16.04.9 amd64 [可从 2.7.12-1ubuntu0~16.04.8 升级] python2.7-minimal/xenial-security 2.7.12-1ubuntu0~16.04.9 amd64 [可从 2.7.12-1ubuntu0~16.04.8 升级] python3.5/xenial-security 3.5.2-2ubuntu0~16.04.9 amd64 [可从 3.5.2-2ubuntu0~16.04.8 升级] python3.5-dev/xenial-security 3.5.2-2ubuntu0~16.04.9 amd64 [可从 3.5.2-2ubuntu0~16.04.8 升级] python3.5-minimal/xenial-security 3.5.2-2ubuntu0~16.04.9 amd64 [可从 3.5.2-2ubuntu0~16.04.8 升级] hannu@wkbx ~ bash (P)PID=(19384)23069, s=0 $ time apt 列表--可升级 列表...完成 已过去 0.326 秒,p=100.03,0.326 实际,0.318 用户,0.008 系统。
所以...这将为你$items
设置可用更新的数量:
$ items="$(( $(apt list --upgradable 2>/dev/null | grep upgradable | wc -l) - 1 ))" ; 回显 $items 0
现在,使用 bash 条件来确定根据它执行哪些命令。