![用于安装软件包(如果尚未安装)的 Bash 脚本(来自包含许多软件包的目录)- Fedora 17](https://linux22.com/image/8132/%E7%94%A8%E4%BA%8E%E5%AE%89%E8%A3%85%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%88%E5%A6%82%E6%9E%9C%E5%B0%9A%E6%9C%AA%E5%AE%89%E8%A3%85%EF%BC%89%E7%9A%84%20Bash%20%E8%84%9A%E6%9C%AC%EF%BC%88%E6%9D%A5%E8%87%AA%E5%8C%85%E5%90%AB%E8%AE%B8%E5%A4%9A%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%9A%84%E7%9B%AE%E5%BD%95%EF%BC%89-%20Fedora%2017.png)
我有一个充满 rpm 的目录(及其依赖项)。目前我正在执行yum localinstall ./packages_directory/*.rpm
安装其中的所有软件包。它会自动跳过已经安装的。但是,如果所有软件包都已安装,则这会花费太长时间。我希望它能够更快地安装软件包。我认为的另一种选择是检查这些软件包中的每一个是否已经安装(也许使用其他命令)。如果它们没有安装,那么我对它们运行本地安装。有人可以帮我写这个脚本吗?或者也许是更快的替代方案。
答案1
我为它想出了一个脚本(Fedora 17)。假设当前脚本运行目录也是rpm所在目录:
install_packages(){
echo "Installing/Checking Fedora packages. Process may take a while..."
for i in *
do
if test -f "$i" #Test if it is a file
then
i=$(basename $i) #Remove parent directory part of the string
PACKAGE_NAME=${i::-4} #Remove .rpm from the end of file name
if rpm -q $PACKAGE_NAME | grep "not installed" > /dev/null #If package not yet installed
then
echo "Installing $i ..."
yum localinstall ./fc17/"$i" -y > /dev/null #Install this package
fi
fi
done
echo "Packages checked/installed"
}
对于 Fedora 22 只需替换yum localinstall
为dnf install