Impostazione della variabile d'ambiente PATH a livello di sistema in Mavericks


41

Nelle versioni precedenti del sistema operativo si poteva impostare la variabile d'ambiente PATH a livello di sistema /etc/launchd.confper renderla disponibile per tutte le app (non solo la riga di comando).

In Mavericks questo sembra non essere più utilizzato.

Esiste un'altra tecnica per farlo nei maverick?

Risposte:


51

Yosemite

/etc/launchd.confnon è più supportato in 10.10. Vedi man launchctl:

Il file /etc/launchd.conf non viene più consultato per l'esecuzione dei sottocomandi durante l'avvio anticipato; questa funzionalità è stata rimossa per motivi di sicurezza.

Ora puoi ad esempio salvare questa lista come ~/Library/LaunchAgents/my.startup.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Il launchctl setenvcomando viene eseguito come utente, quindi si applica solo ai processi avviati nel dominio utente.

Questo metodo non si applica alle applicazioni che vengono riaperte al momento dell'accesso se è selezionata l'opzione "Riapri le finestre quando si accede nuovamente".

Mavericks e precedenti

In 10.9 e precedenti, è possibile ad esempio eseguire

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

e quindi riavviare per applicare le modifiche.

Altri metodi

/etc/pathse si /etc/paths.d/applicano solo (o principalmente) alle shell. Le linee in /etc/pathse /etc/paths.d/*vengono aggiunti al percorso da path_helper , che è gestito da /etc/profile, /etc/zshenve /etc/csh.login. Non conosco programmi diversi dalle shell che prenderebbero in considerazione /etc/pathso /etc/paths.d/.

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


2
Sì; semplicemente non esiste per impostazione predefinita, ma crearlo e impostare le voci appropriate aiuta
mgol il

Su Yosemite, ho scoperto che alcuni programmi non sembrano vedere PYTHONPATH, che ho impostato in /etc/launchd.conf e ho usato la correzione della riga di comando (il secondo paragrafo nella risposta) e non sembra funzionare , mi dà solo il messaggio di errore / aiuto launchctl.
Tango,

@Tango Ho modificato la risposta. /etc/launchd.confè stato rimosso in 10.10.
Lri,

Aggiungo che la mia esperienza, giocando con bash, è che, il 10.10, launchctl setenv sembra non fare nulla. Ho provato a impostare le variabili env, quindi ho controllato il valore con echo ed erano ancora indefiniti.
Tango,

1
@Tango Esci e riapri l'applicazione del terminale dopo l'esecuzione launchctl setenv. launchctl setenvnon ha mai influito sui processi esistenti.
Lri,

11

C'è un modo molto più semplice. Inserire un file di testo nella cartella /etc/paths.d/. In questo file di testo, immettere il percorso desiderato E una nuova riga. Il modo migliore è creare un nuovo file per ogni percorso.

Sul mio sistema, c'è un file chiamato MySQL con il testo '/ usr / local / mysql / bin' e una nuova riga.


Ho appena pubblicato una nuova domanda se ci sono modi per affrontare la debolezza descritta da @LauriRanta.
Kuzzooroo,

Solo un anacdoto: ho usato anche questo metodo, in quanto è il "modo OS X" raccomandato. Non ho avuto molta fortuna nel rendere onore al Sistema in modo coerente i file PATH che ho in /etc/paths.d, e di solito finisco con il comando export shell, o posizionando i miei PATH in ~ / .bash_profile, che funzionano sempre, se non altro per il mio account utente corrente e non per tutto il sistema. Se i file PATH in /etc/paths.d funzionano sempre per te, allora sono geloso che il tuo sistema si comporti meglio del mio;)
chillin

Questo è nuovo per me. Bello!
CousinCocaine,

3

Potresti essere in grado di impostare le variabili di ambiente nel file /etc/launchd-user.conf...

In Mavericks, sono stato in grado di configurare una variabile d'ambiente nel file usando la riga:

setenv TEST test

Dopo un nuovo avvio, $TEST viene impostato da /etc/launchd-user.conf.

modificare

È possibile che la sintassi del file in /etc/launchd.conf non sia valida. Puoi pubblicare i contenuti di quel file per un esame?

Da quello che vedo, l'impostazione della variabile PATH in /etc/launchd.conf funziona normalmente. Tuttavia, launchdnon esegue alcuna espansione dei parametri . Pertanto, se si dispone di una voce simile setenv PATH $PATH:/usr/local/bin, il percorso risultante verrebbe impostato su " $PATH:/usr/local/bin" (nota: non il valore di PATH, ma il testo "$ PATH")


Grazie, il problema che sto riscontrando è l'impostazione del PERCORSO, altre variabili d'ambiente sembrano funzionare.
Tom,

@ Tom - Ho fornito un suggerimento aggiuntivo sopra
Eddie Kelley il

1
è davvero launch-user.conf o launch- [nome_utente_attuale] .conf
Shanimal

/etc/launchd.conf contenente 'setenv TEST test' non si propaga nel Terminale sui miei Mavericks.
Dave X

Oops: s / Mavericks / Yosemite /.
Dave X

0

sulla mia installazione di Mavericks, l'aggiunta di "setenv PATH blablabla" a /etc/launchd.conf non ha funzionato dopo il riavvio

così ho aggiunto il mio nuovo percorso alla fine di / etc / percorsi, che ha funzionato.


Non ha funzionato per me. Ho riavviato, /etc/pathscontiene tutto ciò che voglio e tuttavia Sublime vede ancora solo il PERCORSO originale. Se lo eseguo dal terminale, funziona.
mgol

Il comando path_helper nel mio / etc / profile usa / etc / percorsi e /etc/paths.d per sovrascrivere qualsiasi PERCORSO che potrebbe essere stato impostato da /etc/launchd.conf
Dave X

0

Ho scoperto che setenv PATH funziona ancora per me per Terminal e applicazioni, ma ha interrotto gli script di shell, avviati direttamente facendo clic o Apri con in Terminal da, diciamo, Finder. È molto strano. Altre variabili d'ambiente impostate in/etc/launchd.conf opera.

Per ripararlo per gli script di shell avviati direttamente, ho duplicato l'impostazione PATH in ~/.bash_profile.


0

Modifica /etc/paths.do utilizzo.bash_profile non ha funzionato per me, tuttavia, come suggerito da qualcun altro (in realtà sono venuto qui per valutare la sua risposta, ma non sono riuscito a trovarla di nuovo ?!), ho modificato /etc/pathsquale funziona per me

Nel mio caso, ho aggiunto lo strumento Android adbe androidi comandi del terminale indicando i loro percorsi sdk ( adbal giorno d'oggi si è spostato in un'altra directory) che sembrano

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools

0

SWEET, aggiungendo quell'XML a ~ / Library / LaunchAgents / setenv.SVN.plist ha permesso a BBEdit di usare i binari di sovversione che ho installato in / opt.

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>

1
Qualche idea su come determinare se questo file supporta l'espansione dei parametri? Potrei aver impostato il percorso in modo che quello in / opt sia l'unico. E sto pensando che probabilmente NON supporta l'utilizzo di $ PATH. Come definiresti il ​​percorso esistente per cominciare?
Mark M,

-1

Basta aggiungere il percorso 'bin' (il percorso che si desidera aggiungere) al file / etc / percorsi - riavviare o accedere nuovamente !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

salva il file e accedi nuovamente ... spero che questo ti aiuti

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.