我如何使用shell来判断软件是否安装?

时间:2016-11-27 12:08:17

标签: shell ubuntu

我的电脑的操作系统是ubuntu 14.04,我想写一个脚本来自动安装一些软件,我需要判断它之前没有安装过,例如,我想要的 是否安装了google-chrome,代码如下:

if [ !which google-chrome  #I knoe this  way was wrong]
do
     download it 
     sudo dpkg  -i  google-chrome*.deb
done 
fi

我知道判断代码如果[]错了,你能告诉我怎么判断它没有安装使用shell?

2 个答案:

答案 0 :(得分:2)

请注意,which正在搜索PATH variable。见this。给定用户可能在其$HOME/bin/中提到的目录(例如/usr/local/bin/$PATH ...)不是也不应该由打包系统管理。

不要忘记Linux是multi-user系统的核心。例如,我的妻子和儿子可以使用同一台电脑。不同的用户可能会有不同的$PATH设置,因此会使用不同的程序集(例如,通过execvp(3)或从他们的shell调用的等效项...)。

如果用户有自己的google-chrome-stable程序(例如在他的google-chrome中,我认为您不应该在系统级别安装$HOME/bin/包。 ,通过其他一些程序安装)但是你(甚至可能是你的用户)应该决定你在这种情况下会做什么。

我会测试是否已经安装了google-chrome-stable (但是,你正在做一些与你所要求的不同的东西)。

也许你可以测试

if dpkg -l google-chrome-stable >& /dev/null ; then
  echo google-chrome-stable is installed
fi
顺便说一句,我不认为在未经用户事先明确同意的情况下自动安装任何软件包都是个好主意。你应该建议他安装(这是一个非常不同的问题,可能是在shell中明智地自动完成的问题)。

在我的Debian系统上,/usr/bin/google-chrome/etc/altneratives/google-chrome的符号链接,它是/usr/bin/google-chrome-stable的符号链接,是/opt/google/chrome/google-chrome的符号链接。所以,使用realpath(1),我也可以使用

if  dpkg -S $(realpath $(which google-chrome)) >& /dev/null ; then
  echo some package gives google-chrome
fi

答案 1 :(得分:1)

您可以使用dpkg检查包名的状态,它会告诉您它是否未安装或是否未激活等等...

相关问题