gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:57:36 28 4
gpt4 key购买 nike

我的电脑的操作系统是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

我知道判断代码 if[] 是错误的,你能告诉我如何判断它没有安装使用 shell 吗?

最佳答案

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

不要忘记 Linux 本质上是一个 multi-user系统。例如,我的妻子和儿子可以使用同一台 PC。不同的用户可能有不同的$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 的符号链接(symbolic link)这是 /usr/bin/google-chrome-stable 的符号链接(symbolic link)这是 /opt/google/chrome/google-chrome 的符号链接(symbolic link).因此,使用 realpath(1) , 我也可以用
if  dpkg -S $(realpath $(which google-chrome)) >& /dev/null ; then
echo some package gives google-chrome
fi

关于shell - 如何使用shell判断软件是否安装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40828766/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com