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

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

Tengo un conocimiento básico sobre cómo se puede configurar $PATH, pero ¿existe alguna documentación que describa completamente dónde obtiene Mac OS?todo¿Las rutas que se agregan a $PATH? Soy consciente de cosas como /etc/profile, /etc/pathsy /etc/profile.d, pero ¿hay otros scripts que eventualmente afecten el valor de $PATH? Tampoco estoy muy familiarizado entre los shells de inicio de sesión y sin inicio de sesión ( .bashrc, .bash_profile), pero conozco las diferencias básicas.

Respuesta1

Por lo general, su RUTA la establece el shell. Para Bash, todo esexplicado en el manual. También puedes abrir man bashy saltar a la INVOCATIONparte.

Invocado 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 desde el primero que existe y es legible.

Invocado 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, además, haypath_helperque lee el contenido /etc/paths.dy lo 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 tieneuna buena explicación de shells de inicio de sesión y sin inicio de sesión.

Entonces, esencialmente solo existen 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)

Respuesta2

Las rutas en /etc/pathsy /etc/paths.d/*generalmente se agregan PATHmedianteayudante_ruta. 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 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 de forma predeterminada, y el shell que se abre cuando accede a su computadora mediante ssh también es un shell de inicio de sesión. Sin embargo , muchos emuladores de terminal en otras plataformas tmuxy el modo shell en Emacs abren nuevos shells como shells sin inicio de sesión.

He añadido 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 lo heredan todos los demás procesos, incluidos los procesos iniciados por usuario. Puede aplicar cambios /etc/launchd.confreiniciando o ejecutando launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.confy reiniciando procesos.

En OS X, ~/.profileno se lee cuando inicia sesión gráficamente. Si ambos ~/.bash_profiley ~/.profileexisten, bash no lee ~/.profileninguno de los dos.

~/.MacOSX/environment.plistdejó de funcionar en 10.8.

información relacionada