Homebrew: ¿Manera fácil de agregar 'gnubin' a la ruta para múltiples paquetes?

Me gustaría usar Homebrew para instalar versiones GNU de varias utilidades y usar las versiones GNU por defecto con sus nombres habituales.

De la salida de brew install gnu-tary leyendo ¿Cómo reemplazar las utilidades de Mac OS X con las utilidades principales de GNU? Aprendí que puedo agregar /usr/local/opt/gnu-tar/libexec/gnubina mi $PATHvariable. Sin embargo, para otros paquetes, el gnubindirectorio está en una ruta diferente, como /usr/local/opt/coreutils/libexec/gnubinpara el coreutilspaquete.

¿Tengo que agregar cada uno de estos a mi ruta a mano, o Homebrew proporciona una manera fácil de recopilar todas las entradas en varios gnubindirectorios en un solo lugar?

Supongo que podría poner algún tipo de script de búsqueda automática en mi .bash_profilegusto:

GNUBINS=$(find -L /usr/local/opt -type d -name gnubin | tr ' ' ':')
export PATH=$GNUBINS:$PATH

Sin embargo, esto se siente un poco torpe e inseguro, y esperaba una solución específica para Homebrew.

Respuestas (3)

La findsolución basada en propuesta tarda unos 5 segundos en ejecutarse en mi sistema. El siguiente fragmento de bash se ejecuta en una fracción de segundo.

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
¡Agradable y rápido! Una advertencia: si no hay tales gnubins, se pondrá literalmente /usr/local/opt/*/libexec/gnubinen el camino, pero presumiblemente uno solo está ejecutando esto si tiene al menos uno gnubinallí. :) (y además, mi findcomando original sufre de un problema similar)

¿ No tienes homebrew/bindirectorio?

Estoy usando Boxen (incluido Homebrew) en el trabajo, Homebrew está instalado en /opt/boxen/homebrew.

Tengo /opt/boxen/homebrew/binun directorio con enlaces a todas las utilidades de Homebrew.

coreutilses un montón de comandos, no una sola fórmula, por lo que creo que aún necesita agregarlo a su PATHpero no debería tener que hacer esto para otro software GNU como gnu-sed, gawko findutilssi los instala con --default-namesla opción.

Aquí hay una lista simple de mis/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
gracias por los consejos de formato, lo tendré en cuenta en el futuro.
No parezco tener homebrew/bin. Supongo que eso sería específico de Boxen. Si descubro que necesito vincular muchos binarios de GNU, consideraré probar Boxen.

No. No creo que Homebrew proporcione atajos. Tienes que anteponer el directorio PATHmanualmente.

function gnuon {
  local gnu_packages=(
    coreutils
    findutils
    grep
    gnu-sed
    gnu-tar
  )
  local i
  for i in ${gnu_packages[@]}; do
    if [[ -d "/usr/local/opt/${i}" ]]; then
      export PATH="/usr/local/opt/${i}/libexec/gnubin:$PATH"
      export MANPATH="/usr/local/opt/${i}/libexec/gnuman:$MANPATH"
    fi
  done
}
gunon