In che modo Mac OS X imposta il valore di $ PATH?


11

Ho una conoscenza di base su come impostare $ PATH, ma esiste una documentazione che descrive in modo completo dove Mac OS ottiene tutti i percorsi che vengono aggiunti a $ PATH? Sono consapevole di cose come /etc/profile, /etc/pathse /etc/profile.d, ma ci sono altri script che alla fine influenzano il valore di $ PATH? Inoltre non ho molta familiarità tra le non-login e le shell di login ( .bashrc, .bash_profile), ma sono consapevole delle differenze di base.

Risposte:


9

Di solito, il tuo PERCORSO è impostato dalla shell. Per Bash, tutto è spiegato nel manuale . Puoi anche aprire man bashe saltare alla INVOCATIONparte.

Richiamato come shell di login interattiva o con --login

Quando Bash viene invocato come shell di login interattiva o come shell non interattiva con l'opzione --login, legge ed esegue prima i comandi dal file / etc / profile, se quel file esiste. Dopo aver letto quel file, cerca ~ / .bash_profile, ~ / .bash_login e ~ / .profile, in quell'ordine, e legge ed esegue i comandi dal primo che esiste ed è leggibile.

Richiamato come shell interattiva non di accesso

Quando viene avviata una shell interattiva che non è una shell di accesso, Bash legge ed esegue i comandi da ~ / .bashrc, se quel file esiste. In OS X, inoltre, c'è path_helperchi legge i contenuti /etc/paths.de li aggiunge al tuo percorso.

La chiave qui è che su OS X, il Terminale apre una shell di login per impostazione predefinita, mentre su Linux, le shell sono normalmente avviate come shell non di login. Josh Staiger ha una buona spiegazione delle shell di login vs non login .

Quindi, ci sono essenzialmente solo questi due tre in cui è possibile impostare percorsi:

  • /etc/profile(che chiama path_helper)
  • /etc/pathse /etc/paths.d(chiamato da path_helper)
  • il tuo file di configurazione della shell ( .bash_profile)

Grazie per la risposta concisa e istruttiva. Quindi suppongo di capire, quali script / artefatti influenzano allora $ PATH. Quindi questo significa che /etc/profileè uno script usato principalmente da bash? Non ho esperienze con altre shell, ma suppongo che seguano una struttura diversa?
Psycho Punch,

Il /etc/profileviene utilizzato dalla maggior parte (tutte? Non sicuro al 100%) conchiglie. Ecco perché è una buona scelta mettere le cose che vuoi ovunque, come i PERCORSI. Bash legge i .bash_file mentre Zsh, ad esempio, legge .zshrcoltre ad altri. Dipende dalla shell.
slhck,

"In OS X, inoltre, c'è path_helper che legge i contenuti di /etc/paths.d e li aggiunge al tuo percorso." No, nonpath_helper viene chiamato per shell interattive non di accesso (né shell non interattive). In realtà , si chiama shell di login interattive . /etc/profile
Maggyero,

8

I percorsi in /etc/pathse /etc/paths.d/*vengono in genere aggiunti PATHda path_helper . path_helperviene eseguito da /etc/profile, quindi viene eseguito quando bash viene invocato come shell di accesso interattiva, ma non quando bash viene invocato come shell non di accesso o shell non interattiva.

/etc/pathscontiene /usr/local/binalla fine per impostazione predefinita ed /etc/paths.d/è vuoto per impostazione predefinita.

Terminal e iTerm 2 aprono nuove shell come shell di accesso per impostazione predefinita e la shell aperta quando si ssh sul computer è anche una shell di accesso. Molti emulatori di terminali su altre piattaforme tmuxe la modalità shell in Emacs aprono comunque nuove shell come shell non di login.

Ho aggiunto questa linea a /etc/launchd.conf:

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

Cambia il valore del PATHprocesso di avvio root. Il valore è ereditato da tutti gli altri processi, inclusi i processi di avvio per utente. È possibile applicare le modifiche /etc/launchd.confriavviando o eseguendo launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.confe riavviando i processi.

Su OS X, ~/.profilenon viene letto quando si accede graficamente. Se entrambi ~/.bash_profileed ~/.profileesistono, bash non legge ~/.profileneanche.

~/.MacOSX/environment.plist smesso di funzionare in 10.8.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.