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.
  • Sì : 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.