2013-12-22 74 views
6

我正在創建一個需要安裝幾個應用程序的BASH腳本。 ffmpegsox在OS X上查找brew的安裝位置

,以確保他們在的地方,當我的腳本運行時我首先檢查安裝自制軟件的使用:

#!/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路徑?

+0

難道你不能只捕捉'which'和grep/awk/regex對其結果的標準輸出嗎? :)或者直接管它 – 2013-12-22 15:14:15

+0

是的,但是這產生了錯誤信息顯示在我的腳本中。然而,你給了我靈感。請參閱下面的答案。 – dwkns

+0

你使用的是'var = $(which -s brew)'嗎? – 2013-12-22 19:33:09

回答

9

回答我的問題...

可以測試的which brew輸出和事情相應的處理。要優雅地處理沒有安裝Homebrew的情況,您可以使用if which brew 2> /dev/null,它將stderr重定向到/dev/null

brew --prefix在這裏也很有用,因爲它給出了將自制軟件安裝的應用程序符號鏈接到的路徑,而不是它們的實際安裝路徑。

一個腳本,它的工作原理,並顯示此工作:

#!/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的指針。