Ho intenzione di raggruppare insieme 1 & 2 perché tutte le shell leggono i file all'avvio.
PATH è ereditato dal suo processo genitore. Questo è un concetto chiave che devi capire.
Il PATH è prima codificato nel kernel:
sysctl user.cs_path
user.cs_path: /usr/bin:/bin:/usr/sbin:/sbin
launchd che funge da init
può essere configurato per cambiare questo PATH. Generalmente non è cambiato.
loginwindow.app imposterà un ambiente quando accedi al tuo computer. PATH verrà controllato che è stato impostato o sarà impostato sul percorso hard coded nel kernel o su un percorso modificato impostato da launchd. È come se il loginwindow.app chiamasse login -pf <username>
.
A questo punto, un utente LaunchAgent o LaunchDaemon può modificare il PERCORSO.
Questo sarà il PERCORSO disponibile per le applicazioni GUI dal Finder. (Le prime versioni di OS X potevano usare ~ / .MacOSX / environment.plist per cambiare il PATH per le applicazioni GUI). Ora se questo sembra complicato, non lo è e più probabilmente, come me, il PERCORSO disponibile è /usr/bin:/bin:/usr/sbin:/sbin
Quando avvii Terminal.app, per prima cosa chiama login
(login -pf) che attiva la tua shell come una shell di login. Vengono letti i file appropriati in / etc e la cartella HOME. Ora, PATH dovrebbe essere diverso da quello impostato da loginwindow.app. Ricorda che abbiamo parlato dell'eredità? Se si avvia un'applicazione GUI dalla sessione del terminale, il PATH disponibile per l'applicazione GUI sarà lo stesso impostato dalla shell.
Per quanto riguarda i daemon, di solito sono avviati dal loro percorso assoluto.