Come impostare PATH per le applicazioni avviate dal Finder


70

Le app avviate tramite Finder sembrano non rispettare il PERCORSO come impostato .bash_profile. Quindi, quando provo ad eseguire il codice da un IDE (Intellij) non ho più accesso ai programmi /usr/local/bin, che normalmente viene aggiunto al mio percorso nel Terminale.

Apparentemente .MacOSX/environment.plist era il modo per farlo, ma non funziona più in Lion.

Come posso impostare le PATHapplicazioni lanciate da Finder?


Sei sicuro che la soluzione accettata funzioni su 10.8?
sorin,

1
@SorinSbarnea (So che è vecchio, ma) Posso verificare che la risposta attualmente accettata funzioni per me su OS X 10.8.3, quando uso anche l' hack di riavvio dock suggerito . (Sto impostando una variabile d'ambiente diversa, non $PATHnel caso sia importante.)
Calrion

vedi anche < stackoverflow.com/questions/829749/… >. È praticamente un duplicato.
Philipp Kunz,

Risposte:


38

Se sei su 10.7 e non su 10.8, la soluzione seguente funziona bene:

Ho avuto lo stesso problema con Eclipse, ma ora ho aggiunto ad esempio il seguente al mio .bash_profilee poi ha funzionato.

export PATH=some_path:another_path
launchctl setenv PATH $PATH

Nel caso in cui si desideri lasciare intatto il percorso originale

p=$(launchctl getenv PATH)
launchctl setenv PATH /my/new/path:$p

invece (o solo launchctl setenv PATH /my/new/path:$(launchctl getenv PATH)).

Nota: la modifica del PERCORSO launchctl non avrà effetto fino a quando il Dock non verrà "riavviato". Un nuovo processo Dock si avvierà automaticamente dopo che quello corrente è stato ucciso con il comando:

killall Dock

1
Ho finito per usare: "launchctl setenv PATH $ PATH". L'aggiunta del percorso di lancio esistente tramite "$ p" finisce per ripetere il percorso ogni volta che si apre una shell.
Caffeina Coma,

4
Questo non funziona su OS X 10.8 - provato con Eclipse e IntelliJ - la set|grep PATHloro esecuzione tornerà semprePATH=/usr/bin:/bin:/usr/sbin:/sbin
sorin

1
Non funziona neanche per il mio (10.8.1)
nohillside

4
Si potrebbe provare a riavviare il molo dopo esecuzione launchctl: osascript -e 'tell app "Dock" to quit'. Sembrava risolverlo per me.
Ivan Andrus,

2
Questo funziona per me nel 10.12, ma solo come una tantum. Dopo aver riavviato la macchina, gli effetti vengono persi.
Dover8,

19

Per rispondere alla tua domanda sul tuo "nuovo" problema, ho deciso di scrivere un'altra risposta, perché è più facile spiegarlo con dei campioni.

Un modo per caricare le variabili di ambiente all'avvio del tuo strumento (IDE) preferito è come può essere fatto con eclipse - penso che ci debba essere anche una struttura simile nel tuo strumento (IDE).

Come può essere fatto in eclipse - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(leggermente riscritto sulle variabili di ambiente)

Creare un file di testo vuoto chiamato "eclipse.sh" nella directory del bundle dell'applicazione Eclipse /Applications/eclipse/Eclipse.app/Contents/MacOS

Apri eclipse.sh in un editor di testo e inserisci i seguenti contenuti:

#!/bin/sh

. ~/.bash_profile

logger "`dirname \"$0\"`/eclipse"

exec "`dirname \"$0\"`/eclipse" $@

Nel Terminale impostare il flag eseguibile dello script di shell eclipse.sh, ovvero:

chmod +x /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.sh

Apri il file Info.plist di Eclipse.app e modifica il valore per la chiave CFBundleExecutable da eclipse a eclipse.sh.

MacOS X non rileva automaticamente che Info.plist di Eclipse.app è cambiato. Pertanto è necessario forzare l'aggiornamento del database LaunchService nel terminale utilizzando il comando lsregister:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app

Al prossimo avvio di Eclipse.app dal Dock o dal Finder, è necessario impostare le variabili di ambiente.


+1 per una spiegazione chiara e accurata e per il fatto che oltre sei anni dopo, questo funziona ancora con High Sierra, 10.13.x.
dgnuff,

16

Su OS X 10.10 Yosemite, ho usato questo comando:

sudo launchctl config user path <my path setting>

Essere consapevoli del fatto che imposta il PERCORSO di lancio per tutti gli utenti . Questo ha funzionato bene per il mio caso d'uso. Nota che ti verrà chiesto di riavviare il tuo computer affinché gli effetti prendano piede.


Ciò non sembra influire sulla variabile d'ambiente PATH delle applicazioni che vengono riaperte all'accesso (che erano aperte al momento dello spegnimento).
Brecht Machiels,

4
Questa risposta ha funzionato per me. In particolare, per accedere all'eseguibile gestito da Brew, ho dovuto sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbine riavviato.
JP

Questa è la risposta migliore qui per aggiungere / usr / local / bin per applicazioni basate su Homebrew. Gente, per favore, votate questa risposta! Funziona anche in 10.11 e 10.12 (non testato in 10.13 me stesso). Non c'è bisogno di scherzare environment.plistnella maggior parte dei casi.
Mark Edington,

questo ha funzionato per me mentre la risposta accettata no
MichaelChirico il

11

Su Mountain Lion tutto /etc/pathse il /etc/launchd.confmontaggio non ha alcun effetto!

I forum degli sviluppatori di Apple dicono:

"Cambia la Info.plist del .app stesso per contenere un dizionario" LSEnvironment "con le variabili d'ambiente che desideri.

~ / .MacOSX / environment.plist non è più supportato. "

Quindi ho modificato direttamente l'app Info.plist(tasto destro su "AppName.app" (in questo caso SourceTree) e poi " Show package contents")

Mostra contenuto della confezione

e ha aggiunto una nuova coppia chiave / dict chiamata:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(vedi: Documentazione LaunchServicesKeys su Apple )

inserisci qui la descrizione dell'immagine

ora l'app (nel mio caso SourceTree) usa il percorso indicato e funziona con git 1.9.3 :-)

PS: Ovviamente devi adattare la voce Path alle tue esigenze specifiche.


È vero? Vedo molti post con informazioni contraddittorie, alcuni dei quali sono chiaramente vecchi, ma alcuni sembrano recenti. Non ho nemmeno (il 10.8.2) /etc/launchd.confcomunque. Presumibilmente, anche se le regole non stabiliscono che le applicazioni devono utilizzare i propri file Info.plist per i percorsi, essi potrebbero ancora essere utilizzando altri file - /etc/launchd.conf, /etc/paths/o /etc/paths.d/*, o `~ / .MacOSX / environment.plist. È sicuro dire quindi che, in pratica , i percorsi per le app GUI in Mountain Lion potrebbero essere impostati in uno di questi file?
orome,

2
Questo Info.plist è stata l'unica cosa che ha funzionato per me, dopo aver provato lauchd.conf, etc / percorsi ecc con i miei Maverici ed eclissi. In realtà anche questo non ha funzionato immediatamente, è necessario ricordare due cose: 1. eseguire /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.appcome indicato in un'altra risposta, dopo aver modificato plist e 2. aggiungere il percorso completo lì, non è possibile utilizzare il PERCORSO esistente come negli script del profilo.
JaakL,

Funziona su Sierra (10.12). Ma è ancora necessario eseguire il lsregistercomando, come notato da @JaakL.
Alastair Harrison,

1

Su Mountain Lion (10.8.4), $PATHviene trattato in qualche modo specialmente. launchctl setenv PATH /your/path:/herenon ha alcun effetto sulle $PATHistanze in Terminal.app o Emacs.app successivamente lanciate dal Dock o dal Finder (mentre launchctl setenv SPONG foofunziona benissimo). Inoltre $HOME/.launchd.confnon funziona. /etc/launchd.confè l'unico modo per trovare PATH impostato correttamente ovunque. Sfortunatamente, non si possono usare gli ambienti come $HOMElì, quindi tutti gli utenti del mio laptop hanno /Users/nb/binsul proprio $PATH. Sono solo io, quindi non mi interessa.


Dovresti scoprire che il processo Terminale raccoglie il PATHvalore che hai impostato, ma: quando crei un nuovo terminale avvia una shell di login che, se stai usando bash, viene eseguita /etc/profile, inizializzando PATHsul valore da cui è stato restituito /usr/libexec/path_helper. Se scegli Shell> Nuovo comando ... ed esegui env(non in una shell) dovresti scoprire che PATHè il valore impostato tramite launchd.
Chris Page

-1

Prova a impostare il percorso nel tuo ~ / .profile o ~ / .bash_profile o ~ / .zprofile (per zsh). Questo ha funzionato per me con VimR: non stava leggendo il PERCORSO quando veniva lanciato dal dock, ma funzionava quando veniva lanciato dal terminale. A proposito, stavo correndo su OSX 10.11.

Non ho una buona padronanza su questo per darti una grande spiegazione del perché funziona, ci sono molte spiegazioni online sui diversi file di configurazione e cosa fanno: https://stackoverflow.com/questions/415403/ che cosa è-la-differenza-tra-bashrc-bash-profilo-e-ambiente

Inoltre, vedi una discussione simile qui: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893 # 24542893


La domanda chiede come farlo per le app avviate da Doc che sono le stesse del lancio da Finder per cui dici che la tua risposta non funziona - e possiamo spiegare esattamente perché funziona / non funziona
user151019

-3

Su Mac OS X 10.8.4, Mountain Lion, l'ambiente del percorso incorpora i percorsi elencati in questo file:

/etc/paths

È possibile modificare questo file utilizzando uno strumento da riga di comando, ad esempio vimutilizzando il seguente comando:

sudo vim /etc/paths
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.