我正在创建一个BASH脚本,需要安装几个应用程序。 ffmpeg
和sox
为了确保我的脚本运行时它们就位,我首先检查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
然后我检查sox
和ffmpeg
是否已安装:
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 :(得分:9)
回答我自己的问题......
您可以测试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指针。
答案 1 :(得分:0)
此外,Homebrew的--prefix
模式在遥远的2020年得到了增强(或者也许一直是这种方式),因此现在它以软件包名称作为参数。定位那些没有链接到标准路径的“仅keg”软件包很容易:
$ brew --prefix ffmpeg
/usr/local/opt/ffmpeg