Come posso impostare la variabile d'ambiente PATH globale su OS X?


101

Vorrei aggiungere alla variabile d'ambiente PATH globale su OS X in modo che tutte le shell utente e le applicazioni GUI ottengano lo stesso ambiente PATH.

So di poter aggiungere il percorso negli script di avvio della shell, ma tali impostazioni non sono ereditate dalle applicazioni GUI.

L'unico modo che ho trovato finora è di ridefinire la variabile d'ambiente PATH in /etc/launchd.conf :

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

Non riuscivo a capire un modo per aggiungere effettivamente al PERCORSO launchd.conf.

Sono un po 'preoccupato per questo metodo, ma finora questa è l'unica cosa che funziona. C'è un modo migliore?



2
Per Yosemite e in seguito, vedere stackoverflow.com/questions/25385934/...
thSoft

Nessuna delle risposte qui risponde alla domanda del PO. Ma il commento qui di thSoft è giusto sui soldi! Forse questo dovrebbe essere unito o collegato alla domanda a cui si fa riferimento: stackoverflow.com/questions/25385934/…
Kevin Buchs,

Risposte:


71

le informazioni sulla GUI di palmer sono corrette, ma esiste un modo più gestibile per modificare il percorso visto dalla shell. Come detto mediaslave , è possibile modificare /etc/paths, ma ancora meglio è possibile rilasciare un file di testo /etc/paths.d/che contiene un percorso e tutte le shell costruiranno il percorso correttamente.

Ad esempio, sul mio sistema:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin

1
Bene grazie! Nota: questo richiede di disconnettersi e riconnettersi prima che funzioni.
Weronika,

@weronika: ho scoperto che era sufficiente uscire e riavviare X11(meno doloroso del logout completamente). Non l'ho provato Terminal.
Peter Gluck,

Mi riferivo al Terminale - hai ragione, ho dimenticato di specificare.
Weronika,

8
Questo è buono a sapersi, ma NON risponde alla domanda del PO in quanto questo meccanismo non si applica alle app GUI. L'OP era alla ricerca di una soluzione unificata che gli consentisse di aggiungere l'impostazione predefinita $PATH.
mklement

cosa intendi con "il mio sistema" qui, @cogg? Non stiamo tutti usando OS X qui? Scusate ma sono ancora nuovo su OS X. Sto usando OS X 10.7
ericn

48

/etc/launchd.conf

Il launchd.conffile è ** l'unica soluzione completa che funzionerà sia per la riga di comando che per le applicazioni GUI su OS X v10.8 (Mountain Lion) e v10.9 (Mavericks), una soluzione che funzionerà con le applicazioni GUI e console, per tutti gli utenti .

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

Inserisci

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

Nell'esempio sopra ho aggiunto /usr/local/bini valori di ambiente predefiniti per PATH.

Tieni presente che questo file non è uno script e non hai la possibilità di utilizzare le sostituzioni. Inoltre, per applicare questi è necessario riavviare.

Ricorda, tutte le altre sono solo soluzioni parziali:

  • environment.plist non funziona per le applicazioni avviate tramite Spotlight.
  • /etc/paths - solo per console
  • /etc/csh.cshrcoppure /etc/bashrc- solo per alcune conchiglie

Questa risposta si basa sulla stessa domanda da Impostazione delle variabili di ambiente su Mac OS X .


7
Grande scoperta, ma la domanda parla già di launchd e si sta chiedendo come aggiungere al percorso in esso.
Cregox,

21
Hai davvero aggiunto un commento alla domanda originale indicando te stesso come "la vera risposta"?
TJ Luoma,

7
È implicito nella tua - utile - risposta, ma solo per precisarla: il desiderio del PO di aggiungere al percorso predefinito non è supportato, perché non puoi fare riferimento ad altre variabili d'ambiente /etc/launchd.conf.
mklement

Non è globale - l'ambiente della riga di comando lo eliminerà quando / etc / profile chiamerà path_helper e ricostruirà il PERCORSO da / etc / percorsi e /etc/paths.d/
Dave X

1
secondo apple.stackexchange.com/questions/106355/… , questo non funziona più per Yosemite o
versioni

7

Dovrai impostarlo su una base shell per shell; Le shell di tipo Bash e csh non condividono gli stessi file di configurazione e la stessa sintassi per regolare il PERCORSO.

Cercare di farlo launchctlnon funzionerà, perché le variabili di ambiente sono impostate all'accesso; non esistono a livello di sistema in Unix al di fuori di una sessione di shell.

Quindi vorrai aggiungere

setenv PATH "$PATH:/add/my/extra/path"

a /etc/csh.cshrce

export PATH="$PATH:/more/paths:/

a /etc/bashrc.

Se vuoi variabili d'ambiente nelle applicazioni GUI, è più complicato. Devi creare un .MacOSX/environment.plistfile nella home directory di ogni utente. La .MacOSXdirectory probabilmente non esisterà per impostazione predefinita, quindi dovrai crearla.

Il formato del file è così:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Maggiori informazioni su environment.plist è sul sito di Apple .


Ma le impostazioni diventano effettive quando impostate in /etc/launchd.conf ... Hmmm ... / me è confuso.
Serse

Veramente? Quale variabile d'ambiente stai impostando lì?
palmer

1
Solo un aggiornamento a partire da OS X 10.8: l' ~/.MacOSX/environment.plistapproccio non è più supportato e non c'è sostituto a livello di utente. A livello di sistema è possibile utilizzare /etc/launchd.conf(e esiste una soluzione per - *. App).
mklement

Non risponde alle domande di OP.
Kevin Buchs,

3

Puoi modificare il tuo percorso globale aggiungendo righe a /etc/paths, un percorso per riga.

sudo nano /etc/paths dovrebbe portarti lì.


2
Questo è buono a sapersi, ma non risponde alla domanda del PO in quanto questo meccanismo non si applica alle app GUI.
mklement


1

Non sono sicuro che qualcuno abbia coperto il modo più semplice ed elegante . Almeno su Mac OS X v10.6 (Snow Leopard).

Scherzi con il [/etc/|~/.]di [profile|bashrc]file può funzionare, ma è un po 'di un hack. La /etc/paths.d/directory è la strada da percorrere:

  • Sudo nel tuo editor preferito.
  • Crea un nuovo file chiamato *name*(semplicemente non nominarlo come qualcosa che è già lì) /etc/paths.d/con un percorso per riga:

    /usr/X11/bin
    /Developer/usr/bin
    
  • Quindi aggiungere

    eval '/usr/libexec/path_helper -s`
    

    verso profileo bashrc, e dovresti essere bravo ad andare.


1
Questo è buono a sapersi, ma non risponde alla domanda del PO in quanto questo meccanismo non si applica alle app GUI.
mklement

Il nome del file è letteralmente *name*? O vuoi dire solo name?
Peter Mortensen,

0

Non sono sicuro che launchd lo accetti, ma prova:

setenv PATH "$ PATH: / my / path"

1
Sfortunatamente non funziona. Non sembra che launchctl abbia accesso a variabili di ambiente così facilmente. C'è un comando per ottenere variabili d'ambiente, ma non c'è assolutamente documentazione su come usarlo.
lajos,

0

Non sono sicuro del motivo per cui lo useresti /etc/launchd.confal contrario /etc/profile- ma non sono un esperto di Mac OS X - Ti credo in quanto sono sicuro che funzioni, ma launchdè l'implementazione / sostituzione di Mac OS X per init- Mac OS X mi confonde.

Ad ogni modo, setenv PATH "$PATH:/more/paths:/and/more/paths"funzionerà (tcsh), e l'equivalente della shell bourn è export PATH="$PATH:/more/paths:/and/more/paths"- non ho idea di come launchdsia correlato a una particolare shell.

Penso di aver fatto più domande, quindi ho risposto =)


4
Le impostazioni del percorso / etc / profile non vengono visualizzate da nessuna delle app della GUI di OS X. Questo vale solo per bash. Voglio che tutte le applicazioni ottengano la nuova impostazione del percorso.
lajos,

1
Unix? Certo, è unix. Voglio dire, sorta. Sì, abbiamo rotto cose che hanno funzionato per 30 anni, ma è ancora unix! / sospiro
Matt Simmons,
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.