Frage

Update: Der Link unten keine vollständige Antwort haben . den Weg oder die Variable an zwei Stellen (eine für GUI und eine für Shell) eingestellt zu haben, ist lahm.

Duplizieren nicht von : Festlegen von Umgebungsvariablen in OS X ?


Von einem Windows-Hintergrund, wo es ist sehr einfach zu installieren und Umgebungsvariablen zu ändern (gehen Sie einfach auf Systemeigenschaften> Erweitert> Umgebungsvariablen), scheint es nicht zu sein, dass gerade nach vorne auf Mac OS 10.5. Die meisten Referenzen sagen, ich sollte aktualisieren / etc / profile oder ~ / .profile. Sind diejenigen, die äquivalent von Systemvariablen und Benutzervariablen? Zum Beispiel, wo soll ich meine JAVA_HOME Variable?


EDIT:

Ich möchte von dem Terminal die Variable zugreifen können, sowie eine App wie Eclipse. Auch ich hoffe, ich muß nicht neu starten / Abmeldung zu diesem Effekt dauern.

War es hilfreich?

Lösung

Es gibt keine Notwendigkeit für die Vervielfältigung. Sie können von launchd verwendet Umgebungsvariablen (und Kindprozesse, das heißt alles, was Sie von Spotlight starten) launchctl setenv verwendet wird.

Zum Beispiel, wenn Sie Ihren aktuellen Pfad in launchd spiegeln, nachdem es bis in .bashrc Einstellung oder wo auch immer:

PATH=whatever:you:want
launchctl setenv PATH $PATH

Umgebungsvariablen werden nicht automatisch in laufenden Anwendungen aktualisiert. Sie müssen Anwendungen neu zu beleben die aktualisierten Umgebungsvariablen zu erhalten (auch wenn Sie nur Variablen in der Shell gesetzt, zum Beispiel PATH=whatever:you:want; es gibt keine Notwendigkeit das Terminal wieder aufzunehmen).

Andere Tipps

Es gibt mehrere Orte, an denen Sie können Umgebungsvariablen gesetzt.

  • ~/.profile: Verwenden Sie diese für Variablen Sie alle Programme vom Terminal ins Leben gerufen setzen in (zur Kenntnis, dass im Gegensatz zu Linux, alle Schalen in Terminal.app geöffnet Schalen anmelden)
  • .
  • ~/.bashrc: dies für Schalen aufgerufen wird, die nicht anmelden Muscheln. Verwenden Sie diese für Alias-Namen und andere Dinge, die in Subshells werden müssen neu definiert, nicht für Umgebungsvariablen, die vererbt werden.
  • /etc/profile: dies wird geladen, bevor ~ / .profile, ist aber ansonsten gleichwertig. Verwenden Sie es, wenn Sie die Variable wollen Terminalprogramme von allen Benutzern auf der Maschine gestartet anzuwenden (vorausgesetzt, sie bash verwenden).
  • ~/.MacOSX/environment.plist: dies durch Loginwindow auf Login gelesen wird. Sie gilt für alle Anwendungen, einschließlich GUI diejenigen, ausgenommen die von Spotlight ins Leben gerufen in 10.5 (nicht 10.6). Es erfordert, dass Sie wieder abzumelden und Anmeldung für die Änderungen wirksam werden. Diese Datei wird nicht mehr unterstützt ab OS X 10.8.
  • launchd Instanz Ihrer Benutzer: Dies gilt für alle Programme durch den Benutzer, GUI und CLI gestartet. Sie können mithilfe des setenv Befehl in launchctl Änderungen jederzeit beantragen. In der Theorie , sollten Sie in der Lage sein setenv Befehle in ~/.launchd.conf zu setzen, und launchd würde sie automatisch gelesen, wenn der Benutzer anmeldet, aber in der Praxis Unterstützung für diese Datei wurde nie umgesetzt. Stattdessen können Sie einen anderen Mechanismus verwenden, um ein Skript bei der Anmeldung auszuführen und haben, dass launchctl Skriptaufruf der launchd Umgebung einzurichten.
  • /etc/launchd.conf: Das von launchd gelesen wird, wenn das System startet und wenn sich ein Benutzer anmeldet Sie jeden einzelnen Prozess auf dem System beeinflussen, weil launchd die Wurzel Prozess.. Um Änderungen an der Laufwurzel launchd Sie Rohr können die Befehle in sudo launchctl.

Die grundlegenden Dinge zu verstehen sind:

  • Umgebungsvariablen wird durch ein Verfahren der Kinder zum Zeitpunkt des gegabelten vererbt werden.
  • der root-Prozess ist eine launchd Instanz, und es gibt auch eine separate launchd Instanz pro Benutzersitzung.
  • launchd können Sie seine aktuelle Umgebungsvariablen launchctl ändern; die aktualisierten Variablen werden dann mit allen neuen Verfahren zur Gabelung von da an geerbt.

Beispiel für eine Umgebungsvariable mit launchd Einstellung:

echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl

Nun starten Sie Ihre GUI-Anwendung, die die Variable verwendet, und voila!

um die Tatsache zu umgehen, dass ~/.launchd.conf nicht funktioniert, können Sie das folgende Skript in ~/Library/LaunchAgents/local.launchd.conf.plist setzen:

<?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>local.launchd.conf</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl &lt; ~/.launchd.conf</string>    
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Dann können Sie setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE innerhalb ~/.launchd.conf setzen, und es wird bei jeder Login ausgeführt werden.

Beachten Sie, dass, wenn eine Befehlsliste in launchctl auf diese Weise kochend, werden Sie nicht in der Lage sein, Räume zu setzen Umgebungsvariablen mit Werten. Wenn Sie dies tun, dann können Sie rufen launchctl wie folgt:. launchctl setenv MYVARIABLE "QUOTE THE STRING"

Auch die anderen Programme beachten Sie, dass bei der Anmeldung ausgeführt werden, bevor der launchagent ausführen kann und somit nicht die Umgebungsvariablen sehen kann es setzt.

Ich denke, die OP was sucht ist eine einfache, Windows-ähnliche Lösung.

hier ya gehen:

https://www.macupdate.com/app/mac/14617/rcenvironment

Sie können auf Linux nachlesen, was ziemlich nahe ist, was Mac OS X ist. Oder Sie können bis auf BSD Unix lesen, die ein wenig näher ist. Zum größten Teil sind die Unterschiede zwischen Linux und BSD nicht weit her.

/etc/profile sind Systemumgebungsvariablen.

~/.profile sind benutzerspezifischen Umgebungsvariablen.

"wo soll ich meine Variable JAVA_HOME gesetzt?"

  • Haben Sie mehrere Benutzer? Haben sie kümmern? Möchten Sie einen anderen Benutzer auf Chaos durch einen /etc/profile verändern?

Im Allgemeinen ziehe ich es nicht mit systemweite Einstellungen zu verwirren, obwohl ich der einzige Benutzer bin. Ich ziehe meine lokalen Einstellungen zu bearbeiten.

Für GUI-Anwendungen, müssen Sie erstellen und bearbeiten ~/.MacOSX/environment.plist. Weitere Details hier . Sie werden für diese zu übernehmen anmelden müssen aus. Ich bin mir nicht sicher, ob sie auch Anwendungen von Terminal gestartet beeinflussen, aber ich nehme an, sie würden.

Für Anwendungen von Terminal gestartet, können Sie auch die ~ / .profile-Datei bearbeiten.

Öffnen Sie einfach die ~/.profile Datei über nano im Terminal und geben Sie dort:

export PATH=whatever/you/want:$PATH

Speichern Sie diese Datei (cmd + X und Y). Danach bitte wieder abmelden / anmelden oder einfach nur einen neuen Tab im Terminal öffnen und versuchen, Ihre neue Variable verwenden.

Bitte vergessen Sie nicht hinzufügen „: $ PATH“. Nach was auch immer / Sie / wollen, sonst werden Sie alle Pfade in PATH-Variablen löschen, die vor, dass es

Synchronisieren OS X Umgebungsvariablen für Befehlszeile und GUI-Anwendungen aus einer Hand mit osx-env-sync .

Ich gab auch eine Antwort auf eine Frage im Zusammenhang hier .

Wenn Sie Umgebung ändern Variablen wollen dauerhaft auf macOS, setzen Sie sie in /etc/paths. Hinweis , diese Datei schreibgeschützt ist standardmäßig, so dass Sie haben werden chmod für Schreibrechte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top