¿Dónde se configura $ PATH en OS X 10.6 Snow Leopard?

134

yo tecleo echo $PATH en la línea de comandos y obtener

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

Me pregunto dónde se está arreglando esto desde mi .bash_login archivo está vacío.

Estoy particularmente preocupado de que, después de instalar MacPorts, instaló un montón de basura en /opt. No creo que ese directorio exista en una instalación normal de Mac OS X.

Actualizar: Gracias a Jtimberman para corregir mi echo $PATH declaración

Andrew
fuente
5
comentario de SMccandlish : easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit /etc/paths . While the new /etc/paths.d/ thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide.
Sathyajith Bhat
@Sathya, me parece /etc/paths.d Es útil para la instalación de scripts. Si quiero que mi script de instalación agregue el programa instalado a la ruta, puedo colocar un archivo en /etc/paths.d. Si quiero editar la ruta manualmente, /etc/paths Es una mejor opción.
haydenmuhl
He hecho un script basado principalmente en esta publicación, que imprime rápidamente dónde se define la RUTA en estas múltiples ubicaciones: gist.github.com/lopespm/6407349952bc8a1ff8fb
Pedro Lopes

Respuestas:

155

Cuando bash comienza a leer los siguientes archivos cada vez que inicie sesión. Para los fines de OS X, esto significa que cada vez que abra un nuevo Terminal ventana.

/etc/profile
~/.bash_profile
~/.bash_login   (if .bash_profile does not exist)
~/.profile      (if .bash_login does not exist)

Cuando comienzas un nuevo shell escribiendo bash en la línea de comandos, se lee .bashrc

OS X también usa ~/.MacOSX/environment.plist para establecer más variables de entorno, incluyendo rutas si es necesario.

Finalmente, /etc/paths y /etc/paths.d son leídos por el shell también.


/opt/local/bin se agregan en ~/.tcshrc por MacPorts. También asegúrese de mirar en ~/.cshrc.

Steve Folly
fuente
5
Aparentemente, ~/.MacOSX/environment.plist No funciona para algunas personas. En Cambiar ruta para OS X una alternativa utilizando la carpeta /etc/paths.d es descrito. No he probado eso.
Arjan
+1 para ~/.cshrc. Fui loco tratando de averiguar por qué ~/.profile no estaba funcionando
tomlogic
Creo que esta respuesta es incompleta. Estoy tratando de averiguar dónde está una ruta errónea (inexistente): / usr / bin / local, mi shell se queja, y no está en ninguno de esos archivos.
Tommy
Yo creo que .bashrc Se lee independientemente si escribes bash o no.
Xiao Peng - ZenUML.com
47

Echa un vistazo al archivo /etc/paths, que es utilizado por /usr/libexec/path_helper, que es utilizado por /etc/profile.

Para MacPorts, use sudo /etc/paths/opt/local/bin y vuelva a abrir la ventana de terminal.

Community
fuente
25

En serio, Leopard nos dio una nueva forma de agregar ruta. Simplemente cree un archivo que contenga la parte de la ruta que desea agregar y colóquelo en /etc/paths.d

Un ejemplo rápido de hacer esto en un solo paso es:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

De lo contrario, puede ir a /etc/paths.d y colocar el archivo directamente allí. De cualquier manera, cualquier parte de la ruta en los archivos de ese directorio se agregará a la ruta predeterminada.

Esto también funciona para manpath.

Aquí hay un enlace a más detalles:

ars technica: ¿Cómo agrego algo a PATH en el leopardo de las nieves?

En una segunda nota: MacPorts pone todo en el directorio opt precisamente porque no es usado por las cosas de Apple. De esa manera no entrará en conflicto. Su guía (excelentemente escrita, BTW) tiene una explicación de por qué usa opt y cómo cambiar ese valor predeterminado si lo desea.

Guia de MacPorts

leanne
fuente
Muy genial. Ahora solo tenemos que conseguir que las aplicaciones dependientes de la ruta ya no contaminen nuestros archivos de perfil ...
Daniel Beck
Quiéralo. ¡Sencillo!
Andrew Hedges
comentario de SMccandlish : I have to concur that there's nothing weird or bad about MacPorts using /opt (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation.
Sathyajith Bhat
Línea única, sin anexar archivos y fácil eliminación. Me gusta esto. Gracias leanne
Ibrahim Lawal
4

Para mostrar tu camino, echo $ PATH.

echo $PATH

Para configurar su camino, edite ~/.bash_profileno ~/.bash_login.

jtimberman
fuente
3

También está el camino determinado por ssh .

Comparar echo $PATH a ssh localhost 'echo $PATH'. Como ssh no lee / etc / profile, / usr / libexec / path_helper no se ejecuta y, por lo tanto, / etc / paths se omite. Ahora intenta ssh localhost 'source /etc/profile; echo $PATH'. Los caminos deberían estar más cerca. Es probable que las diferencias restantes se deban a la modificación de la ruta en su .bash_profile (que también se omite con ssh) y .bashrc (que se lee con ssh).

Si desea que su ruta ssh sea similar a su ruta de terminal normal, puede agregar source /etc/profile a tu .bashrc.

Keith Bentrup
fuente
¡Gracias por la pista! Estaba buscando exactamente la solución con ssh. svn + ssh no pudo encontrar el comando svnserve exactamente porque la ruta a svnserve estaba en .profile, pero no estaba en .bashrc.
KIR
2

Se podría definir en:

  • Variables del sistema - /etc/paths
  • Variables de usuario - ver la explicación de @Steve Folly
ericn
fuente
1

En realidad se almacena en su .profile archivo en lugar de .bash_login y es común que MacPorts use esto en lugar de .bash_login expediente.

También el /opt El directorio generalmente lo crea MacPorts y almacena sus archivos en esta carpeta.

ricbax
fuente
1

Respecto a docs para /usr/libexec/path_helper utilidad, componentes iniciales para $ PATH se tomó de /etc/paths y por defecto se ve como

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

para OS-X Snow Leopard

A B
fuente