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-tar
y 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/gnubin
a mi $PATH
variable. Sin embargo, para otros paquetes, el gnubin
directorio está en una ruta diferente, como /usr/local/opt/coreutils/libexec/gnubin
para el coreutils
paquete.
¿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 gnubin
directorios en un solo lugar?
Supongo que podría poner algún tipo de script de búsqueda automática en mi .bash_profile
gusto:
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.
La find
solució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
¿ No tienes homebrew/bin
directorio?
Estoy usando Boxen (incluido Homebrew) en el trabajo, Homebrew está instalado en /opt/boxen/homebrew
.
Tengo /opt/boxen/homebrew/bin
un directorio con enlaces a todas las utilidades de Homebrew.
coreutils
es un montón de comandos, no una sola fórmula, por lo que creo que aún necesita agregarlo a su PATH
pero no debería tener que hacer esto para otro software GNU como gnu-sed
, gawk
o findutils
si los instala con --default-names
la 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
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 PATH
manualmente.
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
amacleod
gnubin
s, se pondrá literalmente/usr/local/opt/*/libexec/gnubin
en el camino, pero presumiblemente uno solo está ejecutando esto si tiene al menos unognubin
allí. :) (y además, mifind
comando original sufre de un problema similar)