Festlegen von PATH für vom Finder gestartete Anwendungen


70

Über Finder gestartete Apps scheinen den in festgelegten Pfad nicht zu respektieren .bash_profile. Wenn ich also versuche, Code von einer IDE (Intellij) auszuführen, habe ich keinen Zugriff mehr auf Programme in /usr/local/bin, die normalerweise meinem Pfad im Terminal hinzugefügt werden.

Anscheinend war .MacOSX/environment.plist dies der Weg , aber in Lion funktioniert es nicht mehr.

Wie kann ich die PATHfür Finder gestarteten Anwendungen einstellen ?


Sind Sie sicher, dass Ihre akzeptierte Lösung unter 10.8 funktioniert?
Sorin

1
@SorinSbarnea (Ich weiß, dass dies alt ist, aber) Ich kann überprüfen, ob die aktuell akzeptierte Antwort unter OS X 10.8.3 für mich funktioniert, wenn ich auch den empfohlenen Dock-Neustart-Hack verwende . (Ich setze jedoch eine andere Umgebungsvariable, nicht $PATHfür den Fall, dass es darauf ankommt.)
Calrion,

Siehe auch < stackoverflow.com/questions/829749/… >. Es ist so ziemlich ein Duplikat.
Philipp Kunz

Antworten:


38

Wenn Sie mit 10.7 und nicht mit 10.8 arbeiten, funktioniert die folgende Lösung gut:

Ich hatte das gleiche Problem mit Eclipse, aber jetzt habe ich zB folgendes zu meinem hinzugefügt .bash_profileund dann hat es funktioniert.

export PATH=some_path:another_path
launchctl setenv PATH $PATH

Wenn Sie den ursprünglichen Pfad beibehalten möchten, verwenden Sie ihn

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

stattdessen (oder nur launchctl setenv PATH /my/new/path:$(launchctl getenv PATH)).

Hinweis: Das Ändern des Startpfads wird erst wirksam, wenn das Dock "neu gestartet" wird. Ein neuer Dock-Vorgang wird automatisch gestartet, nachdem der aktuelle Vorgang mit dem folgenden Befehl beendet wurde:

killall Dock

1
Ich endete mit: "launchctl setenv PATH $ PATH". Wenn Sie den vorhandenen Startpfad über "$ p" anhängen, wird der Pfad jedes Mal wiederholt, wenn Sie eine Shell öffnen.
Caffeine Coma

4
Dies funktioniert nicht unter OS X 10.8 - mit Eclipse und IntelliJ ausprobiert - set|grep PATHvon dort wird immer zurückgegebenPATH=/usr/bin:/bin:/usr/sbin:/sbin
sorin

1
Funktioniert auch nicht für meine (10.8.1)
nohillside

4
Sie könnten versuchen , das Dock nach Laufe Neustart launchctl: osascript -e 'tell app "Dock" to quit'. Das schien es für mich zu regeln.
Ivan Andrus

2
Dies funktioniert für mich in 10.12, aber nur als Einzelstück. Nach dem Neustart der Maschine gehen die Effekte verloren.
Dover8

19

Um Ihre Frage zu Ihrem 'neuen' Problem zu beantworten, habe ich mich entschlossen, eine andere Antwort zu schreiben - weil es einfacher ist, dies anhand von Beispielen zu erklären.

Eine Möglichkeit, die Umgebungsvariablen beim Starten des Tools (IDE) Ihrer Wahl zu laden, besteht darin, dass dies mit Eclipse möglich ist. Ich denke, Ihr Tool (IDE) muss ebenfalls eine ähnliche Struktur aufweisen.

Wie es in Eclipse gemacht werden kann - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(etwas über die Umgebungsvariablen neu geschrieben)

Erstellen Sie eine leere Textdatei mit dem Namen "eclipse.sh" im Eclipse-Anwendungspaketverzeichnis /Applications/eclipse/Eclipse.app/Contents/MacOS

Öffnen Sie die Datei eclipse.sh in einem Texteditor und geben Sie den folgenden Inhalt ein:

#!/bin/sh

. ~/.bash_profile

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

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

Im Terminal setzen Sie das Executable-Flag des Shell-Skripts eclipse.sh, dh:

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

Öffnen Sie die Eclipse.app Info.plist und ändern Sie den Wert für den Schlüssel CFBundleExecutable von eclipse in eclipse.sh.

MacOS X erkennt nicht automatisch, dass sich die Info.plist von Eclipse.app geändert hat. Daher müssen Sie die Aktualisierung der LaunchService-Datenbank im Terminal mit dem Befehl lsregister erzwingen:

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

Wenn Sie Eclipse.app das nächste Mal über das Dock oder den Finder starten, sollten die Umgebungsvariablen festgelegt werden.


+1 für eine klare und genaue Erklärung und für die Tatsache, dass dies über sechs Jahre später immer noch mit High Sierra 10.13.x funktioniert.
dgnuff

16

Unter OS X 10.10 Yosemite habe ich folgenden Befehl verwendet:

sudo launchctl config user path <my path setting>

Beachten Sie, dass er den Startpfad für alle Benutzer festlegt . Dies funktionierte gut für meinen Anwendungsfall. Beachten Sie, dass Sie aufgefordert werden, Ihren Computer neu zu starten, damit die Effekte wirksam werden.


Dies scheint keinen Einfluss auf die Umgebungsvariable PATH von Anwendungen zu haben, die beim Anmelden erneut geöffnet wurden (die beim Herunterfahren geöffnet wurden).
Brecht Machiels

4
Diese Antwort hat bei mir funktioniert. Insbesondere um auf die von Brew verwaltete ausführbare Datei zuzugreifen, musste ich neu sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinstarten.
JP

Dies ist die beste Antwort, um / usr / local / bin für Homebrew-basierte Anwendungen hinzuzufügen. Leute, bitte stimmen Sie diese Antwort ab! Es funktioniert auch in 10.11 und 10.12 (nicht in 10.13 selbst getestet). In den environment.plistmeisten Fällen müssen Sie sich nicht damit anlegen .
Mark Edington

Dies funktionierte für mich, während die akzeptierte Antwort nicht
MichaelChirico

11

Auf Mountain Lion hat all das /etc/pathsund die /etc/launchd.confBearbeitung keine Auswirkung!

Apples Entwicklerforen sagen:

"Ändern Sie die Info.plist der .app selbst so, dass sie ein" LSEnvironment "-Wörterbuch mit den gewünschten Umgebungsvariablen enthält.

~ / .MacOSX / environment.plist wird nicht mehr unterstützt. "

Also habe ich die App direkt bearbeitet Info.plist(Rechtsklick auf "AppName.app" (in diesem Fall SourceTree) und dann " Show package contents")

Paketinhalt anzeigen

und fügte ein neues Schlüssel / Dikt-Paar hinzu:

<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>

(siehe: LaunchServicesKeys-Dokumentation bei Apple )

Bildbeschreibung hier eingeben

jetzt benutzt die App (in meinem Fall SourceTree) den angegebenen Pfad und arbeitet mit git 1.9.3 :-)

PS: Natürlich müssen Sie den Pfadeintrag an Ihre spezifischen Pfadanforderungen anpassen.


Ist das wahr? Ich sehe viele Posts mit widersprüchlichen Informationen, von denen einige eindeutig alt sind, von denen einige jedoch neu zu sein scheinen. Ich habe noch nicht einmal (am 10.8.2) eine /etc/launchd.conf. Vermutlich auch wenn die Regeln nicht feststellen , dass Anwendungen sollten ihre Info.plist Dateien für Pfade verwenden, könnten sie noch andere Dateien verwenden - /etc/launchd.conf, /etc/paths/oder /etc/paths.d/*, oder `~ / .MacOSX / environment.plist. Ist es dann sicher zu sagen, dass in der Praxis Pfade für GUI-Apps in Mountain Lion in jeder dieser Dateien festgelegt werden könnten?
Orome

2
Diese Info.plist war das Einzige, was für mich funktioniert hat, nachdem ich lauchd.conf, etc / arrows etc mit meinen Maverics und Eclipse ausprobiert hatte. Tatsächlich hat dies auch nicht sofort funktioniert. Sie müssen sich zwei Dinge merken: 1. Führen Sie /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.appwie in einer anderen Antwort angegeben aus, nachdem Sie plist geändert haben, und 2. fügen Sie dort den vollständigen Pfad hinzu . Sie können den vorhandenen PATH nicht wie in Ihren Profilskripten verwenden.
JaakL

Dies funktioniert auf Sierra (10.12). Es ist jedoch weiterhin erforderlich, den lsregisterBefehl auszuführen , wie von @JaakL angegeben.
Alastair Harrison

1

On Mountain Lion (10.8.4) $PATHwird irgendwie speziell behandelt. launchctl setenv PATH /your/path:/herehat keine Auswirkungen auf die $PATHInstanzen in Terminal.app oder Emacs.app, die anschließend über das Dock oder den Finder gestartet werden ( launchctl setenv SPONG foofunktioniert jedoch einwandfrei ). Funktioniert auch $HOME/.launchd.confnicht. /etc/launchd.confist der einzige Weg, den ich gefunden habe, um PATH überall richtig einzustellen. Leider kann man Envars wie $HOMEdort nicht verwenden , so dass alle User auf meinem Laptop /Users/nb/binauf ihren haben $PATH. Das bin nur ich, also ist es mir egal.


Sie sollten feststellen, dass der Terminal-Prozess den von PATHIhnen festgelegten Wert aufnimmt. Wenn Sie jedoch ein neues Terminal erstellen, wird eine Anmeldeshell gestartet, die - wenn Sie bash verwenden - auf den von zurückgegebenen Wert /etc/profileinitialisiert wird . Wenn Sie Shell> New Command… wählen und ausführen (nicht in einer Shell), sollten Sie feststellen, dass dies der Wert ist, den Sie über launchd festgelegt haben. PATH/usr/libexec/path_helperenvPATH
Chris Seite

-1

Versuchen Sie, den Pfad in Ihrem ~ / .profile oder ~ / .bash_profile oder ~ / .zprofile (für zsh) festzulegen. Dies funktionierte für mich mit VimR - es las nicht den PFAD, als es vom Dock aus gestartet wurde, aber es funktionierte, als es vom Terminal aus gestartet wurde. Ich lief übrigens unter OSX 10.11.

Ich kann das nicht gut genug handhaben, um Ihnen eine gute Erklärung zu geben, warum es funktioniert. Es gibt viele Online-Erklärungen zu den verschiedenen Konfigurationsdateien und deren Funktion: https://stackoverflow.com/questions/415403/ Was ist der Unterschied zwischen bashrc-bash-Profil und Umgebung?

Eine ähnliche Diskussion finden Sie auch hier: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893 # 24542893


In der Frage wird gefragt, wie dies für Apps zu tun ist, die über Doc gestartet wurden. Dies entspricht dem Start über Finder, für den Sie sagen, dass Ihre Antwort nicht funktioniert - und wir können genau erklären, warum dies nicht funktioniert
user151019 22.10.15

-3

Unter Mac OS X 10.8.4, Mountain Lion, enthält die Pfadumgebung die in dieser Datei aufgelisteten Pfade:

/etc/paths

Sie können diese Datei mit einem Befehlszeilentool bearbeiten, z. B. vimmit dem folgenden Befehl:

sudo vim /etc/paths
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.