我正在尝试编写一个 bash 函数来检查是否安装了软件包并在需要时安装它。现在无论如何它总是会安装。
install() {
echo "checking if $1 is already installed"
if [[ ! $(equery -q l $1 | grep -q "$1") ]]
then
emerge -v $1
else
echo "$1 is already installed"
fi
}
install "oracle-jdk-bin"
- 的输出
equery -q l $1
是dev-java/oracle-jdk-bin-1.8.0.45
- grep 应该找到 oracle-jdk-bin 并返回 1
答案1
使用emerge 的“noreplace”选项怎么样?
描述:“跳过在命令行上指定的已安装的软件包。如果没有此选项,您在命令行上指定的任何软件包原子或软件包集都会导致 Portage 重新合并该软件包,即使它已经安装了。请注意,默认情况下,Portage 不会重新合并依赖项,此选项可用于更新世界文件而不重建软件包。”,摘自。https://dev.gentoo.org/~zmedico/portage/doc/man/emerge.1.html