我们知道 aurget yaourt 等工具可以解决普通升级的情况, 但是如果一个包改名了, 或者(不靠谱的)维护者降级了没加前置version, 这些工具不会给出任何提示. 如果没有关注自己使用的包的 comments (没有notify) 以及 aur-general 邮件列表的话, 常常会错过这样的信息, 以致自己机子上的包过期很久也没发现, 以后出现莫名其妙的问题什么的(
举例来说, aur/qtcreator-bin 被收入 [community] 一段时间了, 因为收入后改了名 (新名称是 qtcreator), 导致 yaourt 没有给我任何提示. 今天用下面的语句检查后我才发现, 自己机子里的 qtcreator-bin (版本2.3) 包已经不在 AUR 里了, 而[community-testing]/qtcreator 版本是2.6.0beta, 可见我这里的包已经过期许久.
和上次的小脚本一样, 我又用到了 GNU Parallel, 嗯就是这样(
pacman -Qmq | parallel 'ver=($(package-query {} -AQ -f "%l")); [[ "${ver[0]}" != "${ver[1]}" ]] && echo {} ${ver[0]} != ${ver[1]}'
!= 右边是空的就说明这个名字的包没有后续了么,一下子发现好多个 ( ̄□ ̄)
应该用 %v 而不是 %l
另外写了一个通用版本(因为乃写的命令在 zsh 下运行有问题,而且 POSIX Shell 又没有数组),不过,打印出来的信息就只有软件包的名字了:
pacman -Qmq | parallel 'result=$(package-query -AQ -f "%v" "{}" | uniq -d | wc -l); [ $result -eq 0 ] && echo "{}"'
乃看乃才是大大没错吧(
膜拜Orz
我的怎么要是ver[1]和ver[2]才能正常运行
这个我不清楚呢(