Festlegen der systemweiten Umgebungsvariablen PATH in Mavericks

41

In früheren Betriebssystemversionen konnte man die systemweite Umgebungsvariable PATH festlegen /etc/launchd.conf, um sie für alle Apps (nicht nur für die Befehlszeile) verfügbar zu machen.

In Mavericks scheint dies nicht mehr verwendet zu werden.

Gibt es eine andere Technik, um dies bei Außenseitern zu tun?

Tom
quelle

Antworten:

50

Yosemite

/etc/launchd.confwird in 10.10 nicht mehr unterstützt. Siehe man launchctl:

Die Datei /etc/launchd.conf wird nicht mehr für Unterbefehle herangezogen, die während der frühen Startzeit ausgeführt werden sollen. Diese Funktionalität wurde aus Sicherheitsgründen entfernt.

Sie können diese Liste jetzt beispielsweise speichern als ~/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>

Der launchctl setenvBefehl wird als Benutzer ausgeführt und gilt daher nur für Prozesse, die in der Benutzerdomäne gestartet wurden.

Diese Methode gilt nicht für Anwendungen, die beim Anmelden erneut geöffnet werden, wenn "Fenster beim erneuten Anmelden erneut öffnen" aktiviert ist.

Mavericks und früher

In 10.9 und früher können Sie beispielsweise ausführen

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

und dann neu starten, um die Änderungen zu übernehmen.

Andere Methoden

/etc/pathsund /etc/paths.d/nur (oder hauptsächlich) auf Muscheln anwenden. Die Linien in /etc/pathsund /etc/paths.d/*werden zu dem Pfad durch hinzugefügt path_helper , die aus ausgeführt wird /etc/profile, /etc/zshenvund /etc/csh.login. Ich kenne keine anderen Programme als Shells, die /etc/pathsoder berücksichtigen würden /etc/paths.d/.

~/.MacOSX/environment.plist hat in 10.8 aufgehört zu arbeiten.

Lri
quelle
2
Ja; Standardmäßig ist es nicht vorhanden, aber das Erstellen und Festlegen der richtigen Einträge hilft
mgol
Bei Yosemite habe ich festgestellt, dass einige Programme PYTHONPATH nicht sehen, was ich in /etc/launchd.conf festgelegt habe, und ich habe Ihr Kommandozeilen-Update verwendet (der zweite Absatz in Ihrer Antwort), und es scheint nicht zu funktionieren , es gibt mir nur die launchctl-Fehlermeldung / Hilfemeldung.
Tango
@ Tango Ich habe die Antwort bearbeitet. /etc/launchd.confwurde in 10.10 entfernt.
Lri
Ich füge hinzu, dass meine Erfahrung beim Herumspielen mit bash ist, dass launchctl setenv am 10.10 nichts zu tun scheint. Ich habe versucht, env-Variablen zu setzen, habe dann den Wert mit echo überprüft und sie waren immer noch undefiniert.
Tango
1
@Tango Beenden Sie die Terminalanwendung und öffnen Sie sie erneut, nachdem Sie sie ausgeführt haben launchctl setenv. launchctl setenvhat nie bestehende Prozesse beeinflusst.
Lri
11

Es gibt einen viel einfacheren Weg. Legen Sie eine Textdatei in den Ordner /etc/paths.d/. Geben Sie in dieser Textdatei den gewünschten Pfad UND eine neue Zeile ein. Am besten erstellen Sie für jeden Pfad eine neue Datei.

Auf meinem System gibt es eine Datei namens MySQL mit dem Text '/ usr / local / mysql / bin' und einer neuen Zeile.

CAryaSil
quelle
Ich habe gerade eine neue Frage gestellt, ob es Möglichkeiten gibt, die von @LauriRanta beschriebene Schwäche zu beheben.
Kuzzooroo
Nur eine Anakdote: Ich habe diese Methode ebenfalls verwendet, da dies der empfohlene "OS X-Weg" ist. Ich hatte nicht viel Glück damit, dass das System die PATH-Dateien in /etc/paths.d konsistent beachtet und normalerweise entweder den Befehl export shell verwendet oder meine PATHs in ~ / .bash_profile platziert, was immer funktioniert. wenn auch nur für mein aktuelles Benutzerkonto und nicht systemweit. Wenn PATH - Dateien in /etc/paths.d immer für Sie arbeiten, dann bin ich eifersüchtig , dass Ihr System besser als meine benommen;)
chillin
Dieser ist neu für mich. Nett!
CousinCocaine
3

Möglicherweise können Sie Umgebungsvariablen in der Datei festlegen /etc/launchd-user.conf...

In Mavericks konnte ich eine Umgebungsvariable in der Datei folgendermaßen konfigurieren:

setenv TEST test

Nach einem $TESTNeustart wird von /etc/launchd-user.conf gesetzt.

Bearbeiten

Möglicherweise ist die Syntax der Datei unter /etc/launchd.conf ungültig. Können Sie den Inhalt dieser Datei zur Prüfung bereitstellen?

Nach dem, was ich sehe, funktioniert das Setzen der PATH-Variablen in /etc/launchd.conf normal. Führt launchdjedoch keine Parametererweiterung durch . Wenn Sie also einen Eintrag wie setenv PATH $PATH:/usr/local/bin" $PATH:/usr/local/bin" haben , wird der resultierende Pfad auf " " gesetzt (Hinweis: Nicht der Wert von PATH, sondern der Text "$ PATH").

Eddie Kelley
quelle
Danke, das Problem, das ich habe, stellt den PFAD ein, andere Umgebungsvariablen scheinen zu arbeiten.
Tom
@ Tom - Ich habe oben einen zusätzlichen Vorschlag gemacht
Eddie Kelley
1
Ist es wirklich launch-user.conf oder launch- [current_user_name] .conf
Shanimal
/etc/launchd.conf mit 'setenv TEST test' verbreitet sich auf meinen Mavericks nicht in Terminal.
Dave X
Ups: s / Mavericks / Yosemite /.
Dave X
0

Auf meiner Mavericks-Installation hat das Hinzufügen von "setenv PATH blablabla" zu /etc/launchd.conf nach dem Neustart nicht funktioniert

Also habe ich meinen neuen Pfad an das Ende von / etc / arrows angehängt, was funktioniert hat.

George Dima
quelle
Es hat bei mir nicht funktioniert. Ich habe neu gestartet, /etc/pathsenthält alles , was ich will, und dennoch sieht Sublime nur den ursprünglichen Pfad. Wenn ich es vom Terminal aus starte, funktioniert es.
mgol
Der Befehl path_helper in meiner Datei / etc / profile verwendet / etc / arrows und /etc/paths.d, um jeden Pfad zu überschreiben, der möglicherweise von /etc/launchd.conf
Dave X
0

Ich habe festgestellt, dass setenv PATH für Terminal und Anwendungen immer noch funktioniert, aber Shell-Skripte eingebrochen hat, die direkt über das Klicken oder Öffnen mit in Terminal von beispielsweise Finder gestartet wurden. Es ist sehr seltsam. Andere Umgebungsvariablen in /etc/launchd.confArbeit gesetzt.

Um das Problem bei direkt gestarteten Shell-Skripten zu beheben, habe ich die PATH-Einstellung in dupliziert ~/.bash_profile.

DKroot
quelle
0

Das Bearbeiten /etc/paths.doder Verwenden .bash_profilehat bei mir nicht funktioniert, aber wie von jemand anderem vorgeschlagen (ich bin tatsächlich hierher gekommen, um seine Antwort zu bewerten, aber ich konnte sie nicht wiederfinden ?!), ich habe das bearbeitet, /etc/pathswas bei mir funktioniert

In meinem Fall habe ich Android-Tool adbund androidTerminal-Befehle hinzugefügt, die auf ihre SDK-Pfade verweisen ( adbdie heutzutage in ein anderes Verzeichnis verschoben wurden), die so aussehen

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

Mit SWEET und dem Hinzufügen dieses XML zu ~ / Library / LaunchAgents / setenv.SVN.plist konnte BBEdit die in / opt installierten Subversion-Binärdateien verwenden.

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>
Mark M
quelle
1
Gibt es eine Idee, wie Sie feststellen können, ob diese Datei die Parametererweiterung unterstützt? Möglicherweise habe ich den Pfad so eingestellt, dass der in / opt der einzige ist. Und ich denke, dass es wahrscheinlich NICHT $ PATH unterstützt. Wie würden Sie den vorhandenen Pfad bestimmen, um mit zu beginnen?
Mark M
-1

Fügen Sie einfach Ihren 'bin'-Pfad (den Pfad, den Sie hinzufügen möchten) zur Datei / etc / arrows hinzu - starten Sie neu oder melden Sie sich neu an !!!

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

speichere die Datei und logge dich neu ein ... hoffe das hilft

Code0110
quelle