Homebrew: Easy way to add 'gnubin' to path for multiple packages?
I would like to use Homebrew to install GNU versions of several utilities, and use the GNU versions by default with their usual names.
From the output of brew install gnu-tar
and by reading How to replace Mac OS X utilities with GNU core utilities? I learned that I can add /usr/local/opt/gnu-tar/libexec/gnubin
to my $PATH
variable. However, for other packages, the gnubin
directory is under a different path, like /usr/local/opt/coreutils/libexec/gnubin
for the coreutils
package.
Do I have to add each of these to my path by hand, or does Homebrew provide an easy way to collect all of the entries in various gnubin
directories into one place?
I suppose I could put some kind of auto-finding script in my .bash_profile
like:
GNUBINS=$(find -L /usr/local/opt -type d -name gnubin | tr ' ' ':')
export PATH=$GNUBINS:$PATH
However this feels a little clunky and insecure, and I was hoping for a Homebrew-specific solution.
The proposed find
based solution takes about 5 seconds to execute on my system. The following bash snippet executes in a fraction of a second.
if type brew &>/dev/null; then
HOMEBREW_PREFIX=$(brew --prefix)
# gnubin; gnuman
for d in ${HOMEBREW_PREFIX}/opt/*/libexec/gnubin; do export PATH=$d:$PATH; done
# I actually like that man grep gives the BSD grep man page
#for d in ${HOMEBREW_PREFIX}/opt/*/libexec/gnuman; do export MANPATH=$d:$MANPATH; done
fi
You don't have homebrew/bin
directory?
I am using Boxen (including Homebrew) at work, Homebrew is installed to /opt/boxen/homebrew
.
I have /opt/boxen/homebrew/bin
directory with links to all the Homebrew utilities.
coreutils
is a bunch of commands, not a single formula, so I think you still need to add it to your PATH
but you should not have to do this for other GNU software like gnu-sed
, gawk
or findutils
if you install them with --default-names
option.
Here is a simple list of my /opt/boxen/homebrew/bin
[admin@nzx-mb-125:/opt/boxen/homebrew/bin] : ls -l | grep -i awk
lrwxr-xr-x 1 admin staff 28 16 Dec 16:51 awk -> ../Cellar/gawk/4.1.0/bin/awk
lrwxr-xr-x 1 admin staff 29 16 Dec 16:51 gawk -> ../Cellar/gawk/4.1.0/bin/gawk
lrwxr-xr-x 1 admin staff 35 16 Dec 16:51 gawk-4.1.0 -> ../Cellar/gawk/4.1.0/bin/gawk-4.1.0
lrwxr-xr-x 1 admin staff 30 16 Dec 16:51 igawk -> ../Cellar/gawk/4.1.0/bin/igawk
[admin@nzx-mb-125:/opt/boxen/homebrew/bin] : ls -l | grep -i sed
lrwxr-xr-x 1 admin staff 31 16 Dec 16:52 sed -> ../Cellar/gnu-sed/4.2.2/bin/sed