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

Bash 检测是否安装了自制软件包,bash,shell,homebrew,Bash,Shell,Homebrew,我将编写一个shell脚本来检测系统中是否安装了多个自制软件包。有没有办法使用brew命令来实现这一点 我尝试使用退出代码brew安装--dry run。但是,如果包丢失,则会生成该包。如何 for pkg in macvim ngrep other needed packages; do if brew list -1 | grep -q "^${pkg}\$"; then echo "Package '$pkg' is installed" else

我将编写一个shell脚本来检测系统中是否安装了多个自制软件包。有没有办法使用brew命令来实现这一点

我尝试使用退出代码
brew安装--dry run
。但是,如果包丢失,则会生成该包。

如何

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 ls --versions myformula
输出相应公式的安装版本。如果未安装公式,则输出将为空

当使用最新版本的自制软件时(您可以通过
brew update
获得),您只需运行此软件即可(感谢Slaven):

也就是说,最好检查工具是否存在,而不仅仅是检查各自的自制软件包(例如,通过在
$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
第一步,确保它已安装

$ realpath . || brew install coreutils
这将打印出当前目录的realpath,如果没有,那么它将安装它。 即使找不到realpath,它也不会失败

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

$ realpath ${someDir}

brew--cellar“$formula”>/dev/null 2>&1
--cellar formula:显示cellar中安装公式的位置,没有任何版本目录作为最后路径。
;如果[!-x“$(command-v PKG_EXEC)”,我会很乐意给出答案
;然后#package not installed fi
,因为检查退出代码就足够了:如果公式没有安装,则返回false(1);然后,检查是否安装了
macchanger
。@KeeganKuhn如果安装成功,则
macchanger
位于当前shell的
$PATH
中。如果失败,它可能在路径中不可用或未安装。@Keegan Kuhn-如果您真的只想检查应用程序是否在路径上(而不运行它),可以使用
which-s
-s
选项(静默)记录为“-s无输出,如果找到任何可执行文件,只返回0,如果找不到则返回1。”正确的用法类似于
which macchanger | | echo“macchanger not on PATH”
您的解决方案与
python@3
哪个已安装(并列出)为
python3
。这是针对特定工具的简单解决方案。它不是通用解决方案。
$ realpath ${someDir}