检查是否安装了软件包,如果不是,则安装它
我正在研究Ubuntu系统,目前这是我正在做的事情:
if ! which command > /dev/null; then
echo -e "Command not found! Install? (y/n) c"
read
if "$REPLY" = "y"; then
sudo apt-get install command
fi
fi
这是大多数人会做的吗? 还是有更优雅的解决方案?
要检查是否packagename
安装,输入:
dpkg -s <packagename>
你也可以使用dpkg-query
来实现你的目的,并且可以接受通配符。
dpkg-query -l <packagename>
要找到哪个包拥有该command
,请尝试:
dpkg -S `which <command>`
有关更多详细信息,请参阅文章查找软件包是否安装在Linux和dpkg备忘单中。
为了更清楚一点,下面是一些bash脚本,用于检查包并根据需要安装它。 当然,您可以在发现软件包丢失时做其他事情,例如仅仅使用错误代码退出。
PKG_OK=$(dpkg-query -W --showformat='${Status}n' the.package.name|grep "install ok installed")
echo Checking for somelib: $PKG_OK
if [ "" == "$PKG_OK" ]; then
echo "No somelib. Setting up somelib."
sudo apt-get --force-yes --yes install the.package.name
fi
如果脚本在GUI中运行(例如,它是Nautilus脚本),则可能需要用'gksudo'替换'sudo'调用。
'one'liner返回1(已安装)或0(未安装)'nano'包装。
$(dpkg-query -W -f='${Status}' nano 2>/dev/null | grep -c "ok installed")
即使软件包不存在/不可用。
下面的例子安装'nano'包,如果它没有安装。
if [ $(dpkg-query -W -f='${Status}' nano 2>/dev/null | grep -c "ok installed") -eq 0 ];
then
apt-get install nano;
fi
链接地址: http://www.djcxy.com/p/57053.html
上一篇: Check if a package is installed and then install it if it's not
下一篇: How to check if Docker is installed in a Unix shell script?