¿Cómo debo configurar la variable PATH en mi Mac para que se encuentren las herramientas instaladas por Hombrew?

¿Cómo debo configurar la variable PATH en mi Mac para que se encuentren las herramientas instaladas por Hombrew?

Tratando de configurarcerveza caseraen una Mac nueva (en Mac anteriores instalaría paquetes desde la fuente).

El primer paquete que intenté instalar fue Git:

$ brew install git

La instalación fue bien, pero which gittodavía muestra el que /usr/bin/gitvino junto conLeón(¿Creo?). Y no el que /usr/local/bin/gitacaba 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 /usr/binlos valores predeterminados anteriores /usr/local/binen el$PATH

¡Entonces estoy confundido! Pensé que el punto decerveza casera(y algo de lo que los creadores parecen alardear) es que ¡¿no tienes que meterte con la $PATHvariable?!

Entonces, ¿qué hice mal?

Respuesta1

Esta publicación relacionada me pareció muy útil. En lugar de cambiar la $PATHvariable, simplemente edite su /etc/pathsarchivo.

Homebrew quiere que modifique mi RUTA; no tengo idea de cómo

Tan pronto como seguí las instrucciones mencionadas /usr/local/binarriba /usr/bin, mis problemas se resolvieron.

  1. En OS X, abra Terminal
  2. Escriba el comando:sudo vi /etc/paths
  3. Ingresa tu contraseña si te la solicitan
  4. Verá una lista de rutas. Edítelos para que /usr/local/binla ruta se ingrese encima de la /usr/binruta.
  5. *Guardar y Salir
  6. Reiniciar terminal

Así es como se ve el mío después de hacer eso:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

*Para guardar y salir escriba dos puntos ( :), luego escriba wq(para escribir y salir al mismo tiempo), seguido de Enter.

También puedes abrir el /etc/pathsarchivo en un editor de texto gráfico y editarlo de esa manera.

Crédito afengd Visite Stack Overflow para obtener su respuesta allí.

Respuesta2

Esta respuesta es obsoleta. El orden preferido de Homebrew PATHsolía ser el que se explica, pero eso ya no es cierto. Sin embargo, el enfoque es de aplicación más general, por lo que, en aras del interés, lo dejaré así.


No deberías.

Homebrew mantiene intencionalmente/usr/local/bin después /usr/binen el camino para máxima compatibilidad. Invertir el orden de estos directorios PATHmediante edición /etc/pathssignificaría quetodoLos 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 instalada en Homebrew 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 coloco al comienzo de mi archivo PATH. Este es uno de los primeros bits de mi .bashrc:

[[ :$PATH: == *:$HOME/bin:* ]] || PATH=$HOME/bin:$PATH

Esto comprueba si PATHcontiene ~/biny, en caso contrario, lo antepone. Una vez implementado esto, hacer que selectivamente solo la versión administrada por Homebrew gittenga prioridad sobre la versión del sistema (en lugar decadaBinario administrado por Homebrew), y solo para sus sesiones de shell (en lugar detodoprogramas iniciados desde cualquier lugar, incluidos los programas GUI), es tan simple como vincularlo simbólicamente:

ln -s /usr/local/bin/git ~/bin/git

podríaenlace simbólico /usr/local/Cellar/git/1.8.2.1/bin/gitdirectamente, pero luego tendría que arreglar su enlace simbólico cada vez que hiciera algo brew upgrade git(directa o indirectamente). Al establecer un enlace simbólico al enlace simbólico de ubicación fija de Homebrew, no tiene que preocuparse por eso.

Entonces, agrega un directorio a su directorio $HOMEpara poder agregarlo PATHy poder realizar un enlace simbólico a un enlace simbólico, y eso soluciona su problema y le hace sonreír al Dr. Seuss. Amigo, te veo como enlaces simbólicos, así que ponemos una ruta en tu PATHpara que puedas realizar enlaces simbólicos mientras lo haces.

Respuesta3

No ha hecho nada malo, pero parece bastante claro que si se hubiera interpuesto /usr/local/binen su camino antes, /usr/bineste problema específico desaparecería. La solución más sencilla es hacer precisamente eso y poner algo como

export PATH=/usr/local/bin:$PATH

en su ~/.bash_profilepara que todo lo que instala Homebrew se encuentre primero. Así es como lo configuré en mi Mac y, sin embargo, me ha funcionado durante todo este tiempo, YMMV.

Parece que creen que funcionaría /usr/local/binsiendodespués /usr/bin, así que, si bien es posible que haya arruinado el mío $PATH, puedo ver dónde falta su documentación:

Tenga en cuenta que debe ponerlo /usr/local/bindespués /usr/bin porque algunos programas esperarán obtener la versión del sistema, por ejemplo, Ruby, y se romperán si obtienen la versión más nueva de Homebrew.

DeDiscrepancia 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 RUTA para aplicaciones GUI; el médico (el consejo que debe anteponerse /usr/local/binen /usr/bin su RUTA) se refiere a la configuración de RUTA para aplicaciones CLI".

Respuesta4

Según tengo entendido, brewno pone nada /usr/local/binque colisione (tenga el mismo nombre que) un ejecutable distribuido por Apple. Por lo tanto, tener /usr/local/binen la ruta antes /biny /usr/binno debería ser un problema, porque no debería haber colisiones de nombres. *Sin embargo, consulte los problemas con lsy tary el uso de otros agregadores de paquetes como finky port(MacPorts), más abajo.

Brewhace una de las dos cosas que sé que ayudan a gestionar las colisiones de nombres:

  1. Brewdeja barriles desvinculados en el sótano. Para instalar cosas, Brew deja las herramientas donde están y crea enlaces simbólicos a esas herramientas en formato /usr/local/bin. Para las herramientas brewcon las que no desea una colisión de nombres, no crea un enlace simbólico.
  2. Para muchas, si no todas, las herramientas estándar que también se encuentran en /biny /usr/bin, brewanteponen el enlace /usr/local/bincon una "g", así que, por ejemplo, para realizar una lsversión con preparación, use gls. Simplemente ingrese ls -ly /usr/local/binbusque los archivos vinculados; esos son los que brewse encuentran allí. Nota: Las brewherramientas instaladas a las que se debe acceder por sus nombres reales se encuentran en /usr/local/Cellar/coreutils/8.21/libexec/gnubin.

No me interpongo /usr/local/binen mi camino por dos razones: esas razones se encuentran al final de mi respuesta.

Para evaluar las colisiones de nombres en su sistema, use brew doctory busque esta sección: aquí está el brew doctorresultado de interés:

Warning: /usr/bin occurs before /usr/local/bin
This means that system-provided programs will be used instead of those
provided by Homebrew. The following tools exist at both paths:

    ctags
    emacs
    emacsclient
    etags
    ex
    git
    git-cvsserver
    git-receive-pack
    git-shell
    git-upload-archive
    git-upload-pack
    rview
    rvim
    view
    vim
    vimdiff
    vimtutor
    xxd

Consider setting your PATH so that /usr/local/bin
occurs before /usr/bin. Here is a one-liner:
    echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile

La razón por la que no pongo brewlas herramientas de primero, de hecho, en absoluto, es porque los comandos brewinstalados lsy tarno manejan la ACL del sistema de archivos correctamente; de ​​hecho, la última vez que lo verifiqué (que fue la semana pasada),no fueron manejados en absoluto. Este es un GRAN problema y, para evitarlo por completo, junto con el manproblema de configuración de la página asociado que se etiqueta junto con la configuración $PATHcorrecta, me aseguro de colocar las OSXherramientas relacionadas, especialmente las que se encuentran en /biny /usr/bin, primero.

Otra razón por la que ni siquiera me interpongo /usr/local/binen mi camino es porque brewno funciona bien con otros y fink( portMacPorts) tiene muchos más paquetes compatibles en este momento de los que necesito.AHORA. Por ejemplo, puedo hacerlo gnome-terminalcon fink, pero sería un gran esfuerzo construir una fórmula y hacer lo mismo con brew. Por lo tanto, mantengo /swy /opten mi búsqueda $PATH(para finky port, respectivamente) y hago referencia a las cosas que necesito de /usr/local/bin, incluido gnat, ya sea escrito en detalle, o uso bash alias's, o obtengo un setuparchivo para un entorno completamente diferente cuando escribo Adacó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:

$ /bin/ls -le /var/root | head -7
total 24
drwx------+  3 root  wheel  102 May 28  2013 Desktop
 0: group:everyone deny delete
 1: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit
drwx------+  6 root  wheel  204 Sep 19 14:22 Documents
 0: group:everyone deny delete
 1: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit

y con las brewherramientas instaladas:

$ /usr/local/bin/gls -le /var/root
/usr/local/bin/gls: invalid option -- 'e'
Try '/usr/local/bin/gls --help' for more information.

y

$ /usr/local/bin/gls --help | grep -i acl

Obtendrá resultados similares tary no conozco muchas otras brewherramientas, pero ¿quién puede darse el lujo de que algo se rompa 6 meses después debido a un ACLproblema?

información relacionada