在OS X中查找Homebrew的安装位置

8
我正在创建一个需要安装几个应用程序的BASH脚本。ffmpegsox 为了确保它们在我的脚本运行时已经安装好,我首先检查Homebrew的安装情况:
#!/bin/bash
which -s brew
if [[ $? != 0 ]] ; then
    # Install Homebrew
    /usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
fi

然后我检查是否已安装 soxffmpeg :

echo "---- checking for sox ----"
which -s sox || /usr/local/bin/brew install sox

echo "---- checking for ffmpeg ----"
which -s ffmpeg || /usr/local/bin/brew install ffmpeg

我面临的问题是Homebrew安装在非标准位置时。因为这个脚本在Playtypus中运行,所以我必须使用完整路径到Homebrew。
因此问题是:如何可靠地在BASH脚本中获取Homebrew的安装路径?

你不能直接捕获which的标准输出并在其结果上使用grep/awk/正则表达式吗? :) 或者直接将它作为管道。 - user1467267
是的,但那会在我的脚本中生成错误消息。不过你给了我灵感,看看我的答案。 - dwkns
你是否正在使用类似于 var=$(which -s brew) 的东西? - user1467267
2个回答

10

回答自己的问题...

您可以测试 which brew 的输出,并相应地处理事情。为了优雅地处理 Homebrew 未安装的情况,您可以使用 if which brew 2> /dev/null,它将重定向 stderr/dev/null

brew --prefix 在这里也很有用,因为它给出了 Homebrew 安装的应用程序链接到的路径,而不是它们的实际安装路径。

下面是一个可行的脚本,并展示了它的工作原理:

#!/bin/bash
if which brew 2> /dev/null; then
    brewLocation=`which brew`
    appLocation=`brew --prefix`
    echo "Homebrew is installed in $brewLocation"
    echo "Homebrew apps are run from $appLocation"
else
   echo "Can't find Homebrew"
   echo "To install it open a Terminal window and type :"
   echo /usr/bin/ruby -e \"\$\(curl\ \-fsSL\ https\:\/\/raw\.github\.com\/Homebrew\/homebrew\/go\/install\)\"
fi

感谢Allendar提供的指导。


谢谢!很遗憾在“brew --help”中没有记录。 - Daniel Braun
谢谢!很遗憾在brew --help中没有记录 - undefined

4

补充一下,Homebrew的--prefix模式在2020年已经得到加强(或许一直都是这样),现在可以将软件包名称作为参数输入。这意味着定位那些未链接到标准路径的“keg-only”软件包变得非常容易,只需执行以下操作:

$ brew --prefix ffmpeg
/usr/local/opt/ffmpeg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接