检测是否安装了自制软件包

我将编写一个 shell 脚本来检测系统中是否安装了几个自制软件包。有没有一种方法可以使用一个酿造命令来实现这一点?

我尝试使用 brew install <formula> --dry-run的退出代码,但是如果缺少这个代码,它将构建包。

56271 次浏览

谈什么?

for pkg in macvim ngrep other needed packages; do
if brew list -1 | grep -q "^${pkg}\$"; then
echo "Package '$pkg' is installed"
else
echo "Package '$pkg' is not installed"
fi
done

You can use

brew ls --versions myformula

输出相应公式的已安装版本。如果未安装公式,则输出为空。

当使用最新版本的自制程序时,你可以用 brew update,你可以运行下面的程序(感谢 Slaven) :

if brew ls --versions myformula > /dev/null; then
# The package is installed
else
# The package is not installed
fi

也就是说,检查工具是否存在可能是一个好主意,而不仅仅是检查相应的自制包(例如,通过在 $PATH中搜索可执行文件)。在实践中,人们倾向于以相当多的方式安装工具,自制软件只是其中之一。

# install if we haven't installed any version
brew ls --versions $lib || brew install $lib
# install if we haven't installed latest version
brew outdated $lib || brew install $lib

最简单的两句话: Step one, make sure it's installed

$ realpath . || brew install coreutils

这将打印出当前目录的实际路径,如果没有,那么它将安装它。 它不会失败,即使真正的路径没有找到。

第二步,在实际代码中调用它:

$ realpath ${someDir}

对于脚本和自动化的使用,我发现 brew bundle --help非常方便。

If you do not want to use real bundle file, this snippet works fine in scripts:

brew bundle -v --file=- <<-EOF
brew "mc"
brew "ffmpeg"
brew "wget"
cask "cpuinfo"
cask "intel-power-gadget"
cask "unetbootin"
cask "vlc"
EOF

好的一面是,它会自动检测软件包是否没有安装,如果它是过时的,只有那时才会安装它。

如果不需要更新,请添加标志 --no-upgrade。我已经把 -v的详细,因为想要更多的细节,但你可以跳过它,甚至使用 -q甚至更无声的运行。