Intentando configurar Homebrew en una nueva Mac (en Macs anteriores, instalaría paquetes desde la fuente).
El primer paquete que intenté instalar fue Git:
$ brew install git
La instalación salió bien, pero which git
aún muestra la /usr/bin/git
que vino junto con Lion (¿creo?). Y no el /usr/local/bin/git
que acaba de instalar.
$ echo $PATH
/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@rails31/bin:/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@global/bin:/Users/meltemi/.rvm/rubies/ruby-1.9.2-p290/bin:/Users/michael/.rvm/bin:/usr/local/mysql/bin:/opt/subversion/bin:/Developer/Additions/checker/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
Como puede ver los /usr/bin
valores predeterminados antes /usr/local/bin
en$PATH
Entonces, estoy confundido! ¡Pensé que el objetivo de HomeBrew (y algo de lo que los creadores parecen jactarse) era que no tienes que meterte con la $PATH
variable!?!
Entonces, ¿qué hice mal?
If you choose /usr/local, everything 'just works!'
que tengo que preguntarme qué me estoy perdiendo ... porque no "solo funciona".Respuestas:
Esta publicación relacionada me pareció muy útil. En lugar de cambiar la
$PATH
variable, solo tiene que simplemente editar su/etc/paths
archivo.Homebrew quiere que modifique mi RUTA; no tengo idea de cómo
Tan pronto como seguí las instrucciones y puse
/usr/local/bin
arriba/usr/bin
, mis problemas se resolvieron.sudo vi /etc/paths
/usr/local/bin
ruta se ingrese sobre la/usr/bin
rutaAsí es como se ve el mío después de que hice eso:
* Para guardar y salir, escriba dos puntos (
:
), luego escribawq
(para escribir y salir al mismo tiempo), seguido de Enter.También puede abrir el
/etc/paths
archivo en un editor de texto gráfico y editarlo de esa manera.Gracias a fengd en Stack Overflow por su respuesta allí.
fuente
path_helper
y/etc/paths.d
.Esta respuesta es obsoleta. El orden preferido de Homebrew
PATH
solía ser como se explicó, pero eso ya no es cierto. Sin embargo, el enfoque es de aplicación más general, por lo que, por el bien del interés, lo dejo.No deberías
Homebrew mantiene intencionalmente
/usr/local/bin
después/usr/bin
en el camino para una máxima compatibilidad. Invertir el orden de estos directoriosPATH
mediante la edición/etc/paths
significaría que todos los programas en cualquier parte del sistema, sin importar cómo se iniciaron, obtendrán la versión Homebrew de un comando. Pero algunos pueden esperar específicamente la versión de Apple, o simplemente no poder usar una versión más nueva, etc.¿Cómo preservar este principio y aún obtener la versión de Homebrew instalada
git
? Como dice el refrán, todos los problemas se pueden resolver con una capa de indirección (excepto tener demasiadas capas de indirección). - O en este caso, como resulta, dos capas.Específicamente, ha sido parte de mis hábitos de Unix tener un
~/bin
directorio que puse al comienzo de miPATH
. Este es uno de los primeros bits en mi.bashrc
:Esto verifica si
PATH
contiene~/bin
, y si no, lo antepone. Con eso en su lugar, hacer que selectivamente solo el Homebrew administradogit
tenga prioridad sobre la versión del sistema (en lugar de todos los binarios administrados por Homebrew), y solo para sus sesiones de shell (en lugar de todos los programas iniciados desde cualquier lugar, incluidos los programas GUI), es tan simple como simularlo:Podrías hacer un enlace simbólico
/usr/local/Cellar/git/1.8.2.1/bin/git
directamente, pero luego tendrías que arreglar tu enlace simbólico cada vez que hagas unbrew upgrade git
(directa o indirectamente). Al hacer un enlace simbólico al enlace simbólico de ubicación fija de Homebrew, no tiene que preocuparse por ello.Por lo tanto, agrega un directorio a su
$HOME
para poder agregarlo aPATH
fin de que pueda hacer un enlace simbólico a un enlace simbólico, y eso soluciona su problema y sonríe al Dr. Seuss. Yo dawg, te llevo los enlaces simbólicos, así que ponemos una ruta en tuPATH
para que puedas vincular mientras haces un enlace simbólico.fuente
ln
comando. El primer camino es el objetivo, y el segundo es el enlace simbólicoexport PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
No ha hecho nada malo, pero parece bastante claro que si lo hubiera hecho
/usr/local/bin
antes,/usr/bin
este problema específico desaparecería. La solución más fácil es hacer eso y poner algo comoen su
~/.bash_profile
modo, todo lo que instala Homebrew se encuentra primero. Así es como lo tengo configurado en mi Mac, y me ha funcionado durante tanto tiempo, sin embargo, YMMV.Parece que creen que funcionaría con
/usr/local/bin
estar detrás/usr/bin
, así que si bien podría haber arruinado el mío$PATH
, puedo ver dónde falta su documentación:De Discrepancia entre wiki y brew doctor # 10738 . Tenga en cuenta que este documento continúa diciendo: "Las preguntas frecuentes (la cita anterior) se refieren a la configuración de la RUTA para las aplicaciones de GUI; el médico (el consejo para poner
/usr/local/bin
por delante/usr/bin
en su RUTA) se refiere a la configuración de la RUTA para las aplicaciones de CLI".fuente
/usr/local/bin
s en mi$PATH
? Eso creo. Me pregunto si deberíamos editar el orden de las rutas predeterminadas/etc/paths
o el contenido de/etc/paths.d
? Pero esto afectará a todos los usuarios ... tal vez no sea algo malo. De todos modos, solo quería ver cómo otras personas se han acercado a esto.PATH
(de la manera que elija) para tener/usr/local/bin
prioridad/usr/bin
. Actualizo mi personalmentePATH
en.bash_profile
como se sugiere aquí./usr/local/bin
aunque se encuentren/usr/bin
en el camino. ¿Pero las aplicaciones GUI necesitan una codificación especial? Parece que todas las aplicaciones, GUI o no, necesitan que ajustemos la variable $ PATH. Entonces, ¿qué me estoy perdiendo (o los creadores de Homebrew)?No estoy de acuerdo con la respuesta de jthomas. La edición de su archivo / etc / paths cambiará las rutas de carga para todos los programas. Esto podría ser peligroso si una aplicación del sistema espera encontrar una versión específica de un binario pero encuentra una versión diferente porque ha editado su archivo de rutas. En cambio, cambie su variable de ruta en ~ / .bashrc (o ~ / .bash_profile). Entonces su ruta de carga solo cambiará dentro de la terminal:
Luego
source ~/.bashrc
vuelve a cargar bash o , y listo. Como la ruta homebrew viene antes que nada, bash cargará la versión que descargaste con homebrew.fuente
.bashrc
no se carga por defecto. ¿Lo obtienes manualmente?.bashrc
así que lo obtuve de mi.bash_profile
. Si no desea crear el archivo rc, puede agregar el comando a su.bash_profile
.Según tengo entendido,
brew
no pone nada en/usr/local/bin
eso que colisiona (tiene el mismo nombre que) un ejecutable distribuido de Apple. Por lo tanto, tener/usr/local/bin
en el camino antes/bin
y/usr/bin
no debería ser un problema, porque no debería haber colisiones de nombres. * Sin embargo, vea los problemas conls
ytar
, y el uso de otros agregadores de paquetes comofink
yport
(MacPorts), a continuación.Brew
hace una de las dos cosas que sé que ayudan a administrar las colisiones de nombres:Brew
deja barriles desvinculados en la bodega. Para instalar cosas, brew deja las herramientas donde están y crea enlaces simbólicos a esas herramientas/usr/local/bin
. Para las herramientas quebrew
no desean una colisión de nombres, no crea un enlace simbólico./bin
y/usr/bin
,brew
prefijan el enlace/usr/local/bin
con una "g", por ejemplo, para realizar unals
versión en brew, usegls
. Basta con hacer unals -l
en/usr/local/bin
y buscar los archivos vinculados - esos son los quebrew
ponen allí. Nota: Lasbrew
herramientas instaladas a las que deben acceder sus nombres reales se encuentran en/usr/local/Cellar/coreutils/8.21/libexec/gnubin
.No pongo
/usr/local/bin
en mi camino por dos razones: esas razones están al final de mi respuesta.Para evaluar las colisiones de nombres en su sistema, use
brew doctor
y busque esta sección: aquí está elbrew doctor
resultado de interés:La razón por la que no pongo
brew
las herramientas primero, de hecho, no es porque losbrew
instaladosls
y lostar
comandos no manejan el sistema de archivos ACL correctamente, de hecho, la última vez que revisé (que fue la semana pasada), no estaban t manejado en absoluto . Este es un GRAN problema, y para evitarlo por completo, junto con elman
problema de configuración de página asociado que etiqueta junto con la configuración$PATH
correcta, me aseguro de poner lasOSX
herramientas relacionadas, especialmente las que se encuentran/bin
y/usr/bin
, primero.Otra razón por la que ni siquiera pongo
/usr/local/bin
en mi camino es porquebrew
no juega bien con los demás,fink
yport
(MacPorts) tiene paquetes mucho más compatibles actualmente que los que necesito AHORA . Por ejemplo, yo puedo conseguirgnome-terminal
confink
, pero sería un gran esfuerzo para construir una fórmula y hacer lo mismo conbrew
. Por lo tanto, mantengo/sw
y/opt
en mi búsqueda$PATH
(parafink
yport
, respectivamente) y referencias de cosas que necesito/usr/local/bin
, incluyendognat
, deletreado, o usobash
alias
's, o obtengo unsetup
archivo para un entorno completamente diferente cuando escriboAda
código.La cuestión es que realmente depende de lo que quieras y necesites en ese momento.
Aquí hay un ejemplo del problema de ACL que mencioné anteriormente.
Con las
OSX
herramientas estándar :y con las
brew
herramientas instaladas:y
Obtendrá resultados similares
tar
y no conozco muchas otrasbrew
herramientas, ¡pero quién puede darse el lujo de que algo se rompa en 6 meses debido a unACL
problema!fuente
Hay toda una serie de buenas respuestas aquí. Aquí está el mío:
Le ahorra tener que crear un alias separado para cada programa y, como beneficio adicional, deja accesibles las instalaciones predeterminadas en caso de que las necesite.
Funciona igual si está usando ZSH; solo cambia
bashrc
porzshrc
. Usted puede cambiar hacia fueramy
para_
o incluso@
para ahorrar en escribir.fuente
En lugar de jugar con la RUTA (que en mi historia vuelve a quemarme meses después) agregué un alias para git en mi directorio de alias personalizados zsh (~ / .zshrc / custom / git_alias.zsh).
alias git='/usr/local/bin/git'
fuente
Prefiero limitar los cambios a las variables de entorno, como los
$PATH
usuarios que realmente quieren el cambio. Por lo tanto, simplemente agrego lo siguiente a~/.bashrc
:fuente
Puede emitir el siguiente comando en una terminal, agregará el directorio de inicio de preparación + el / bin en la RUTA de cualquier archivo de inicio SHELL "rc" (bash, zsh, csh)
echo "export PATH="'$PATH:$(brew --prefix)/bin' >> ~/.$(basename $SHELL)rc
¡A disfrutar!
fuente