【问题标题】:Find the install location of brew on OS X在 OS X 上找到 brew 的安装位置
【发布时间】:2013-12-22 10:52:18
【问题描述】:

我正在创建一个需要安装几个应用程序的 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 安装在非标准位置时。

我必须使用 Homebrew 的完整路径,因为此脚本在 Playtypus 中运行。

所以问题是:如何在 BASH 脚本中可靠地获取 Homebrew 的安装路径?

【问题讨论】:

  • 你就不能抓住which 的标准输出和 grep/awk/regex 的结果吗? :) 或者直接使用管道
  • 是的,但是这会产生错误消息以显示在我的脚本中。但是你给了我灵感。请参阅下面的答案。
  • 你在用var=$(which -s brew)之类的东西吗?

标签: bash homebrew


【解决方案1】:

回答我自己的问题...

您可以测试which brew 的输出并进行相应处理。为了优雅地处理未安装 Homebrew 的情况,您可以使用 if which brew 2> /dev/nullstderr 重定向到 /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 的指点。

【讨论】:

    【解决方案2】:

    除此之外,Homebrew 的 --prefix 模式在 2020 年的遥远未来已经得到了增强(或者可能一直都是这样),因此它现在将包名称作为参数。这意味着定位那些没有链接到标准路径的“仅桶”包很容易:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      相关资源
      最近更新 更多