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


yo tecleo echo $PATH en la línea de comando y obtén

/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á estableciendo esto desde mi .bash_login el archivo esta vacio

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

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


132


origen


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. - Sathya♦
@Sathya, me parece /etc/paths.d es útil para scripts de instalación. 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 una secuencia de comandos en su mayoría basada en esta publicación, que rápidamente imprime donde se define la RUTA en estas ubicaciones múltiples: gist.github.com/lopespm/6407349952bc8a1ff8fb - Pedro Lopes


Respuestas:


Cuando bash comienza a leer los siguientes archivos cada vez que inicie sesión. A los efectos 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 comando, lee .bashrc

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

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


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


152



Aparentemente, ~/.MacOSX/environment.plist no funciona para algunas personas En Cambiar ruta para OS X una alternativa al usar la carpeta /etc/paths.d es descrito. No lo he probado. - Arjan
+1 por ~/.cshrc. Se volvió loco tratando de descubrir 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 está quejando, y no está en ninguno de esos archivos. - Tommy
creo .bashrc se lee independientemente de si escribe bash o no. - Xiao Peng - ZenUML.com


Eche 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 la terminal.


47





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 póngalo 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 allí directamente. De cualquier manera, las partes de ruta en los archivos de ese directorio se agregarán a la ruta predeterminada.

Esto también funciona para manpath.

Aquí hay un enlace para 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 utilizado por las cosas de Apple. De esa forma no entrará en conflicto. Su guía (excelentemente escrita, por cierto) tiene una explicación de por qué usa opt y cómo cambiar ese valor predeterminado si lo desea.

Guía MacPorts


25



Muy genial. Ahora solo tenemos que conseguir que esas 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. - Sathya♦
Una sola línea, no se agrega a los archivos y es fácil de quitar. Me gusta esto. Gracias Leanne - Ibrahim Lawal


Para mostrar su ruta, echo $ PATH.

echo $PATH

Para establecer su ruta, edite ~/.bash_profileno ~/.bash_login.


4





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, se omite / etc / paths. Ahora intenta ssh localhost 'source /etc/profile; echo $PATH'. Los caminos deberían estar más cerca. Las diferencias restantes probablemente se deban a la modificación de la ruta en .bash_profile (que también omite ssh) y .bashrc (que es leído por ssh).

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


3



¡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


Podría definirse en cualquiera de los dos:

  • Variables del sistema - /etc/paths
  • Variables de usuario: consulte la explicación de @Steve Folly

2





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

También el /opt directorio suele ser creado por MacPorts y almacena sus archivos en esta carpeta.


1





Respecto a documentos para /usr/libexec/path_helper utilidad, los componentes iniciales de $ PATH se tomaron de /etc/pathsy por defecto se ve como

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

para OS-X Snow Leopard


1