我的电脑的操作系统是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?
答案 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检查包名的状态,它会告诉您它是否未安装或是否未激活等等...