In Mountain Lion come posso impostare, in un unico posto, la variabile d'ambiente PATH per tutte le applicazioni appena lanciate?


9

Su Ask Different ci sono molte domande riguardanti la PATHvariabile d'ambiente e come impostarla per le applicazioni lanciate da una shell, da spotlight o tramite il finder (domande tipiche: come impostare PATH per le applicazioni lanciate dal Finder o come cambiare la variabile d'ambiente PATH. .. ).

Le risposte vanno dagli shscript di avvio a /etc/pathsa /etc/launchd.conf. Eccomi dopo la risposta per un'impostazione unificata di PATHtutte le app su Mac OS X Mountain Lion 10.8.2.

Risposte:


14

Dopo molte prove con diverse opzioni, concludo:

Esiste un modo unificato per impostare le PATHapplicazioni avviate con mezzi diversi (come shell script, Finder e Spotlight)? Bene, sì e no:

  • No : l'impostazione PATHnegli script di avvio della shell (ad es. .bashrc) Funziona solo per le app avviate dalle shell.
  • No : l'impostazione PATHper il launchdprocesso corrente tramite launchctl setenv PATH <...>non funziona affatto per me.
  • : l'impostazione PATHa /etc/launchd.conf(e il riavvio del sistema) farà la appropriata PATHvisibile nelle applicazioni lanciate da Spotlight, Dock e Finder e successivamente conchiglie (locali).
  • No : le shell invocate in remoto non ereditano l'ambiente. (Vedi ... perché le shell remote tramite ssh NON ereditano l'ambiente .. )

Note per la configurazione delle shell:

  1. Per un corretto funzionamento nelle shell locali è importante disattivare l'uso di /usr/libexec/path_helper, poiché i percorsi predefiniti /etc/pathspotrebbero cambiare l'ordine dei percorsi in PATH. **

  2. Per ospitare shell remote è necessario reimportare l' launchdambiente nella shell. Usa qualcosa di simile nel tuo .bashrc:

# the vexatious path stuff
eval $(launchctl export)

Le sfortunate conseguenze dell'intera questione sono:

  • Non è possibile avere queste impostazioni unificate in base all'utente. ( ~/.launchd.confnon funziona.)
  • Nessun modo semplice per costruire il PERCORSO da fonti diverse usando tecniche come l'espansione della directory home et al.

Aggiornamento: PERCORSO Impostazione mediante /etc/launch.confnon non funziona per le coperture effettuato l'accesso remoto tramite ssh (presumo perché il sshdnon passa il suo ambiente che eredita dal suo genitore launchdalla shell bambino.). - Modificherò la risposta di conseguenza.
halloleo,

Risposta aggiornata con una soluzione per shell remote.
halloleo,

1
Bella risposta; È possibile semplificare il sourcing dell'ambiente launchd come segue: eval "$(launchctl export)".
mklement0

Un modo semplice per modificare /etc/launchd.confè semplicemente quello di eseguire sudo -e /etc/launchd.conf(se hai familiarità con vi) o EDITOR=nano sudo -e /etc/launchd.conf(se preferisci un editor non modale).
Nohillside

3

Espandendo la risposta precedente , per cambiare il percorso in /etc/launchd.conf, dovrai fare quanto segue.

  1. Assicurati di avere i privilegi di amministratore.

  2. Crea un nuovo file di testo con il seguente contenuto, modificato per adattarlo alle tue esigenze:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. Salvalo nella tua home directory come launchd.conf.

  4. Apri Terminal.app (o il tuo sostituto preferito) e digita:

    sudo mv ~/launchd.conf /etc

    A seconda dell'utilizzo precedente del sudocomando, potresti ricevere un breve messaggio "fai attenzione a fare quello che stai facendo", ma in entrambi i casi dovrai inserire la password. Tutto il comando fa è spostare il file nella /etcdirectory, che non è direttamente accessibile quando si salva un file in TextEdit, ad esempio. sudo(abbreviazione di "Super User DO") viene utilizzato perché i privilegi di amministratore sono necessari per scrivere in quella directory.

  5. Riavvia il computer.

E dovresti essere pronto. In bocca al lupo!


Grazie per i dettagli, ma la domanda non era su come modificare launchd.conf, ma piuttosto su come tutte le applicazioni ottengano la stessa variabile PATH in modo unificato.
halloleo,

Giusto, ma originariamente ho cercato la domanda cercando di capire come impostare la PATHmia app per la GUI, e ho pensato che avrei aiutato qualsiasi anima povera potrebbe non sapere come effettuare il cambiamento ...
MattDMo

Hai un punto valido qui; tuttavia, penso che l' integrazione delle tue informazioni nella risposta sia l'opzione migliore. - Penso che questo thread di commenti diventi una meta discussione, quindi l'ho aperto su meta.stackoverflow come Cosa fare con una risposta aggiuntiva ...
halloleo

1
in realtà, non avrebbe dovuto essere su meta.apple.stackexchange.com?
MattDMo

In effetti, meta.apple.stackexchange.com sarebbe stato il posto giusto. Semplicemente non sapevo che esistesse ...
Halloleo,

-2

Puoi provare https://github.com/ersiner/osx-env-sync .

Gestisce entrambe le app della riga di comando e della GUI da un'unica fonte . E funziona con l' ultima versione di OS X (Yosemite).


Il che automatizza semplicemente l'altra risposta usando il bit che dice non funziona, ad esempio launchctl setenv PATH <...>
user151019

@Mark Questo non ha nulla a che fare con l'automazione dei passaggi di una risposta qui. Questo utilizza un Launch Agent. Ti suggerisco di provarlo.
Ersin Er,

La soluzione accettata utilizza anche il launchdsistema. La tua soluzione presenta gli stessi problemi indicati nella risposta accettata.
halloleo,

@halloleo L'hai provato davvero? E su quale versione di OS X?
Ersin Er,
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.