MacOS – Homebrew: Easy way to add ‘gnubin’ to path for multiple packages

bashhomebrewmacosterminal

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.

Best Answer

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