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 gitaún muestra la /usr/bin/gitque vino junto con Lion (¿creo?). Y no el /usr/local/bin/gitque 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/binvalores predeterminados antes /usr/local/binen$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 $PATHvariable!?!
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
$PATHvariable, solo tiene que simplemente editar su/etc/pathsarchivo.Homebrew quiere que modifique mi RUTA; no tengo idea de cómo
Tan pronto como seguí las instrucciones y puse
/usr/local/binarriba/usr/bin, mis problemas se resolvieron.sudo vi /etc/paths/usr/local/binruta se ingrese sobre la/usr/binrutaAsí 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/pathsarchivo en un editor de texto gráfico y editarlo de esa manera.Gracias a fengd en Stack Overflow por su respuesta allí.
fuente
path_helpery/etc/paths.d.Esta respuesta es obsoleta. El orden preferido de Homebrew
PATHsolí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/bindespués/usr/binen el camino para una máxima compatibilidad. Invertir el orden de estos directoriosPATHmediante la edición/etc/pathssignificarí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
~/bindirectorio que puse al comienzo de miPATH. Este es uno de los primeros bits en mi.bashrc:Esto verifica si
PATHcontiene~/bin, y si no, lo antepone. Con eso en su lugar, hacer que selectivamente solo el Homebrew administradogittenga 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/gitdirectamente, 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
$HOMEpara poder agregarlo aPATHfin 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 tuPATHpara que puedas vincular mientras haces un enlace simbólico.fuente
lncomando. 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/binantes,/usr/bineste problema específico desaparecería. La solución más fácil es hacer eso y poner algo comoen su
~/.bash_profilemodo, 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/binestar 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/binpor delante/usr/binen su RUTA) se refiere a la configuración de la RUTA para las aplicaciones de CLI".fuente
/usr/local/bins en mi$PATH? Eso creo. Me pregunto si deberíamos editar el orden de las rutas predeterminadas/etc/pathso 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/binprioridad/usr/bin. Actualizo mi personalmentePATHen.bash_profilecomo se sugiere aquí./usr/local/binaunque se encuentren/usr/binen 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 ~/.bashrcvuelve a cargar bash o , y listo. Como la ruta homebrew viene antes que nada, bash cargará la versión que descargaste con homebrew.fuente
.bashrcno se carga por defecto. ¿Lo obtienes manualmente?.bashrcasí 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,
brewno pone nada en/usr/local/bineso que colisiona (tiene el mismo nombre que) un ejecutable distribuido de Apple. Por lo tanto, tener/usr/local/binen el camino antes/biny/usr/binno debería ser un problema, porque no debería haber colisiones de nombres. * Sin embargo, vea los problemas conlsytar, y el uso de otros agregadores de paquetes comofinkyport(MacPorts), a continuación.Brewhace una de las dos cosas que sé que ayudan a administrar las colisiones de nombres:Brewdeja 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 quebrewno desean una colisión de nombres, no crea un enlace simbólico./biny/usr/bin,brewprefijan el enlace/usr/local/bincon una "g", por ejemplo, para realizar unalsversión en brew, usegls. Basta con hacer unals -len/usr/local/biny buscar los archivos vinculados - esos son los quebrewponen allí. Nota: Lasbrewherramientas instaladas a las que deben acceder sus nombres reales se encuentran en/usr/local/Cellar/coreutils/8.21/libexec/gnubin.No pongo
/usr/local/binen 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 doctory busque esta sección: aquí está elbrew doctorresultado de interés:La razón por la que no pongo
brewlas herramientas primero, de hecho, no es porque losbrewinstaladoslsy lostarcomandos 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 elmanproblema de configuración de página asociado que etiqueta junto con la configuración$PATHcorrecta, me aseguro de poner lasOSXherramientas relacionadas, especialmente las que se encuentran/biny/usr/bin, primero.Otra razón por la que ni siquiera pongo
/usr/local/binen mi camino es porquebrewno juega bien con los demás,finkyport(MacPorts) tiene paquetes mucho más compatibles actualmente que los que necesito AHORA . Por ejemplo, yo puedo conseguirgnome-terminalconfink, pero sería un gran esfuerzo para construir una fórmula y hacer lo mismo conbrew. Por lo tanto, mantengo/swy/opten mi búsqueda$PATH(parafinkyport, respectivamente) y referencias de cosas que necesito/usr/local/bin, incluyendognat, deletreado, o usobashalias's, o obtengo unsetuparchivo para un entorno completamente diferente cuando escriboAdacó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
OSXherramientas estándar :y con las
brewherramientas instaladas:y
Obtendrá resultados similares
tary no conozco muchas otrasbrewherramientas, ¡pero quién puede darse el lujo de que algo se rompa en 6 meses debido a unACLproblema!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
bashrcporzshrc. Usted puede cambiar hacia fueramypara_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
$PATHusuarios 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