我即将编写一个shell脚本,检测系统中是否安装了几个homebrew包。 有没有一种方法可以使用brew命令来实现这个目的?
我尝试使用brew install <formula> --dry-run
的退出代码。但是,如果缺少软件包,则会构建软件包。
您可以使用
brew ls --versions myformula
输出已安装的对应公式版本。如果该公式未安装,则输出为空。
当使用最新版本的Homebrew时(可以通过brew update
获得),您只需运行此命令(感谢Slaven):
if brew ls --versions myformula > /dev/null; then
# The package is installed
else
# The package is not installed
fi
话虽如此,检查工具是否存在可能是个不错的主意,而不仅仅是检查相应的Homebrew包(例如,通过在$PATH
中搜索可执行文件)。在实践中,人们倾向于以相当多种方式安装工具,其中Homebrew只是其中之一。
if macchanger --help > /dev/null; then
,那么这会检查 macchanger
是否已安装? - anonymousmacchanger
就在当前 shell 的 $PATH
中。如果失败了,那么它要么不在 PATH 中,要么没有安装。 - Holger Justwhich -s
。 -s
选项(静默)的文档说明为“-s 无输出,如果找到任何可执行文件,则返回0,如果未找到,则返回1。” 正确的用法类似于which macchanger || echo“macchanger未在PATH上”
。 - Jeffrey Aguilera--cask
选项安装了某个软件包,则可以在命令末尾添加 --cask
,并运行类似于 brew ls --versions adoptopenjdk11 --cask > /dev/null
的命令。 - Seiwon Park# 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
有什么问题吗?
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
对于脚本和自动化使用,我发现brew bundle --help
非常方便。
如果你不想使用真正的bundle文件,在脚本中使用这个代码片段也是可以的:
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
以获得更加安静的运行。
最简单的两步操作: 第一步,确保已经安装
$ realpath . || brew install coreutils
$ realpath ${someDir}
brew --cellar "$formula" >/dev/null 2>&1
--cellar formula: 显示公共目录中安装公式的位置,最后一个路径不包含任何版本信息。
brew man page; 很高兴能为您提供这个答案。 - 166_MMXpackage not installed
fi` - JBallin