¿Cómo establece Mac OS X el valor de $ PATH?

11

Tengo una comprensión básica de cómo se puede establecer $ PATH, pero ¿hay una documentación que describa completamente dónde Mac OS obtiene todas las rutas que se agregan a $ PATH? Soy consciente de cosas como /etc/profile, /etc/pathsy /etc/profile.d, pero ¿hay otros scripts que finalmente afectan el valor de $ PATH? Tampoco estoy muy familiarizado entre el no inicio de sesión y los shells de inicio de sesión ( .bashrc, .bash_profile), pero soy consciente de las diferencias básicas.

Golpe Psico
fuente

Respuestas:

9

Por lo general, su camino se establece por el shell. Para Bash, todo se explica en el manual . También puede abrir man bashy saltar a la INVOCATIONparte.

Se invoca como un shell de inicio de sesión interactivo o con --login

Cuando se invoca Bash como un shell de inicio de sesión interactivo, o como un shell no interactivo con la opción --login, primero lee y ejecuta comandos del archivo / etc / profile, si ese archivo existe. Después de leer ese archivo, busca ~ / .bash_profile, ~ / .bash_login y ~ / .profile, en ese orden, y lee y ejecuta comandos del primero que existe y es legible.

Se invoca como un shell interactivo sin inicio de sesión

Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, Bash lee y ejecuta comandos desde ~ / .bashrc, si ese archivo existe. En OS X, adicionalmente, existe el path_helperque lee los contenidos /etc/paths.dy los agrega a su ruta.

La clave aquí es que en OS X, la Terminal abre un shell de inicio de sesión de forma predeterminada, mientras que en Linux, los shells generalmente se inician como shells sin inicio de sesión. Josh Staiger tiene una buena explicación del inicio de sesión frente a los shells sin inicio de sesión .

Entonces, esencialmente solo hay estos dos tres donde puedes establecer rutas:

  • /etc/profile(que llama path_helper)
  • /etc/pathsy /etc/paths.d(llamado desde path_helper)
  • su archivo de configuración de shell ( .bash_profile)
slhck
fuente
Gracias por la respuesta concisa e informativa. Así que supongo que entiendo, qué scripts / artefactos influyen en el $ PATH entonces. Entonces, ¿esto significa que /etc/profilees un script utilizado principalmente por bash? No tengo experiencias con otros proyectiles, pero supongo que siguen una estructura diferente.
Psycho Punch
El /etc/profilees utilizado por la mayoría (¿todo? No está 100% seguro). Es por eso que es una buena opción poner las cosas que desea en todas partes, como PATHs. Bash lee .bash_archivos mientras que Zsh, por ejemplo, lee .zshrcademás de otros. Depende de la cáscara.
slhck
"En OS X, adicionalmente, hay path_helper que lee los contenidos de /etc/paths.d y los agrega a su ruta". No, path_helperes que no pidió conchas interactivo de no ingreso (ni conchas no interactivas). Se llama para shells de inicio de sesión interactivos, de /etc/profilehecho.
Maggyero
8

Las rutas /etc/pathsy /etc/paths.d/*típicamente son agregadas PATHpor path_helper . path_helperse ejecuta desde /etc/profile, por lo que se ejecuta cuando se invoca bash como un shell de inicio de sesión interactivo, pero no cuando se invoca bash como un shell sin inicio de sesión o un shell no interactivo.

/etc/pathscontiene /usr/local/binal final de forma predeterminada y /etc/paths.d/está vacío de forma predeterminada.

Terminal e iTerm 2 abren nuevos shells como shells de inicio de sesión por defecto, y el shell abierto cuando ssh a su computadora también es un shell de inicio de sesión. Sin tmuxembargo, muchos emuladores de terminal en otras plataformas y el modo de shell en Emacs abren nuevos shells como shells sin inicio de sesión.

He agregado esta línea a /etc/launchd.conf:

setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin

Cambia el valor del PATHproceso de lanzamiento raíz. El valor es heredado por todos los demás procesos, incluidos los procesos lanzados por usuario. Puede aplicar cambios /etc/launchd.confreiniciando o ejecutando launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.confy relanzando procesos.

En OS X, ~/.profileno se lee cuando inicia sesión gráficamente. Si ambos ~/.bash_profiley ~/.profileexisten, bash tampoco lee ~/.profile.

~/.MacOSX/environment.plist dejó de funcionar en 10.8.

Lri
fuente