运行时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 条件来确定根据它执行哪些命令。