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.