
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/paths
y /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 bash
y saltar a la INVOCATION
parte.
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, hay
path_helper
que lee el contenido/etc/paths.d
y 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 llamapath_helper
)/etc/paths
y/etc/paths.d
(llamado desdepath_helper
)- su archivo de configuración de shell (
.bash_profile
)
Respuesta2
Las rutas en /etc/paths
y /etc/paths.d/*
generalmente se agregan PATH
medianteayudante_ruta. path_helper
se 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/paths
contiene /usr/local/bin
al 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 tmux
y 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 PATH
proceso de lanzamiento raíz. El valor lo heredan todos los demás procesos, incluidos los procesos iniciados por usuario. Puede aplicar cambios /etc/launchd.conf
reiniciando o ejecutando launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
y reiniciando procesos.
En OS X, ~/.profile
no se lee cuando inicia sesión gráficamente. Si ambos ~/.bash_profile
y ~/.profile
existen, bash no lee ~/.profile
ninguno de los dos.
~/.MacOSX/environment.plist
dejó de funcionar en 10.8.