Voy a agrupar 1 & 2 porque todos los shells leen archivos al inicio.
PATH se hereda de su proceso padre. Este es un concepto clave que necesita comprender.
El PATH se codifica primero en el núcleo:
sysctl user.cs_path
user.cs_path: /usr/bin:/bin:/usr/sbin:/sbin
launchd que actúa como init
puede configurarse para cambiar este PATH. Generalmente no se cambia.
El loginwindow.app configurará un entorno cuando inicies sesión en tu computadora. Se comprobará que PATH se haya configurado o se configurará en la ruta codificada en el núcleo o en una ruta modificada establecida por launchd. Es como si loginwindow.app está llamando a login -pf <username>
.
En este punto, un usuario LaunchAgent o LaunchDaemon puede modificar el PATH.
Este será el PATH disponible para las aplicaciones GUI del Finder. (Las primeras versiones de OS X podrían usar ~ / .MacOSX / environment.plist para cambiar el PATH para las aplicaciones GUI). Ahora, si esto parece complicado, no lo es y es más probable, como yo, el PATH disponible es /usr/bin:/bin:/usr/sbin:/sbin
Cuando inicia Terminal.app, primero llama a login
(login -pf), lo que hace que su shell sea tratado como un shell de inicio de sesión. Se leen los archivos apropiados en / etc y su carpeta HOME. Ahora, PATH debe ser diferente de lo establecido por loginwindow.app. ¿Recuerdas que hablamos de herencia? Si inicia una aplicación GUI desde su sesión de terminal, entonces el PATH disponible para la aplicación GUI será el mismo que el establecido por el shell.
En cuanto a los demonios, generalmente se inician por su ruta absoluta.