Bash/apt-安装前检查软件包版本

Bash/apt-安装前检查软件包版本,bash,apt,Bash,Apt,命令“dpkg”具有选项“-E”或“-skip same version”,以便在已安装相同版本的软件包时不安装该软件包 据我所知,“apt get”并没有任何相似之处 所以我想到了这个: Installed=`sudo apt-cache policy openjdk-6-jre | sed -n '2p' | cut -c 14-` #6b20-1.9.9-0ubuntu1~10.04.2 Candidate=`sudo apt-cache policy openjdk-6-jre | se

命令“dpkg”具有选项“-E”或“-skip same version”,以便在已安装相同版本的软件包时不安装该软件包

据我所知,“apt get”并没有任何相似之处

所以我想到了这个:

Installed=`sudo apt-cache policy openjdk-6-jre | sed -n '2p' | cut -c 14-` #6b20-1.9.9-0ubuntu1~10.04.2
Candidate=`sudo apt-cache policy openjdk-6-jre | sed -n '3p' | cut -c 14-` #6b20-1.9.9-0ubuntu1~10.04.2

if [ "$Installed" -ne "$Candidate" ]; then 
    apt-get -fy install openjdk-6-jre
elif [ "$Installed" -eq "$Candidate" ]; then 
    echo 'Candidate version already installed.'
fi
我的问题:还有其他更简单的方法吗?我试图在bash脚本中使用这些信息,以便所有事情都自动发生


谢谢。

apt get
如果您试图在没有可用升级的情况下安装一个已安装的软件包,那么它不会起任何作用。您需要
--重新安装
,才能强制重新安装。因此,一种更简单的方法是运行apt get install,然后读取输出,看看它是否真的做了什么。但是我试图在bash脚本中使用这些信息,以便所有事情都自动发生……难道apt get install package
不够自动吗?它执行与示例中描述的相同的操作,但输出略有不同。您的脚本当前使用相同的命令来获取已安装版本和候选版本-打字错误?如果行号发生变化,我会执行类似于
sed-n'/^[:space:][]*Installed:/p'
的操作,以获得更健壮的解决方案。最后,无需以root用户身份运行
apt cache policy
——您可以删除
sudo
。这是一个输入错误,非常感谢。