Festlegen von Umgebungsvariablen unter OS X.

849

Was ist der richtige Weg, um Umgebungsvariablen wie PATH in OS X zu ändern?

Ich habe ein wenig bei Google nachgesehen und drei verschiedene Dateien zum Bearbeiten gefunden:

  • / etc / path
  • ~ / .profile
  • ~ / .tcshrc

Ich habe nicht einmal einige dieser Dateien und bin mir ziemlich sicher, dass .tcshrc falsch ist, da OS X jetzt Bash verwendet. Wo sind diese Variablen, insbesondere PATH, definiert?

Ich verwende OS X 10.5 (Leopard).

Paul Wicks
quelle
env "switch.1.disabled=true" open -n /Applications/Eclipse.app/um die GUI-Anwendung mit einer neuen festgelegten Systemumgebung zu starten.
Hong

Antworten:

652

Bruno ist auf dem richtigen Weg. Ich habe umfangreiche Nachforschungen angestellt und wenn Sie Variablen festlegen möchten, die in allen GUI-Anwendungen verfügbar sind, ist Ihre einzige Option /etc/launchd.conf.

Bitte beachten Sie, dass environment.plist nicht für Anwendungen funktioniert, die über Spotlight gestartet werden. Dies wird von Steve Sexton hier dokumentiert .

  1. Öffnen Sie eine Terminal-Eingabeaufforderung

  2. Typ sudo vi /etc/launchd.conf(Hinweis: Diese Datei ist möglicherweise noch nicht vorhanden.)

  3. Fügen Sie Inhalte wie die folgenden in die Datei ein

    # Set environment variables here so they are available globally to all apps
    # (and Terminal), including those launched via Spotlight.
    #
    # After editing this file run the following command from the terminal to update
    # environment variables globally without needing to reboot.
    # NOTE: You will still need to restart the relevant application (including
    # Terminal) to pick up the changes!
    # grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl
    #
    # See http://www.digitaledgesw.com/node/31
    # and http://stackoverflow.com/questions/135688/setting-environment-variables-in-os-x/
    #
    # Note that you must hardcode the paths below, don't use environment variables.
    # You also need to surround multiple values in quotes, see MAVEN_OPTS example below.
    #
    setenv JAVA_VERSION 1.6
    setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
    setenv GROOVY_HOME /Applications/Dev/groovy
    setenv GRAILS_HOME /Applications/Dev/grails
    setenv NEXUS_HOME /Applications/Dev/nexus/nexus-webapp
    setenv JRUBY_HOME /Applications/Dev/jruby
    
    setenv ANT_HOME /Applications/Dev/apache-ant
    setenv ANT_OPTS -Xmx512M
    
    setenv MAVEN_OPTS "-Xmx1024M -XX:MaxPermSize=512m"
    setenv M2_HOME /Applications/Dev/apache-maven
    
    setenv JMETER_HOME /Applications/Dev/jakarta-jmeter
  4. Speichern Sie Ihre Änderungen in vi und starten Sie Ihren Mac neu. Oder verwenden Sie den Befehl grep/ xargs, der im obigen Codekommentar angezeigt wird.

  5. Beweisen Sie, dass Ihre Variablen funktionieren, indem Sie ein Terminalfenster öffnen und eingeben, exportund Sie sollten Ihre neuen Variablen sehen. Diese sind auch in IntelliJ IDEA und anderen GUI-Anwendungen verfügbar, die Sie über Spotlight starten.

Matthew McCullough
quelle
3
Ich sage, dass die akzeptierte Antwort (environment.plist) für mich nicht erfolgreich war. Ich habe den Ansatz launchd.conf auf 10.5 und 10.6 auf vier Computern erfolgreich verwendet.
Matthew McCullough
54
Gibt es eine Möglichkeit, dies ohne einen Neustart des Systems zu tun ?
Sorin
40
Die oben genannte Einschränkung gilt für MacOS X 10.5. MacOS X 10.6 hat diese Einschränkung jedoch nicht mehr und das Festlegen der Werte in der Umgebung.plist funktioniert auch für Apps, die über Spotlight gestartet werden. Die ausgewählte Antwort ist also richtig für Snow Leopard ;-)
Louis Jacomet
5
Die Einstellung launchd.confist eine Möglichkeit, erfordert jedoch einen Neustart (um launchd neu zu starten). Wenn Sie einen Neustart vermeiden möchten, lesen
Matt Curtis
23
Es gibt mehrere Probleme mit dem vorgestellten Startansatz. Die meisten sind spezifisch für die Umgebungsvariable PATH, aber der Fragesteller hat PATH speziell erwähnt. 1) Elemente in launchd.conf werden nicht in interaktiven Shells wie ssh in das System angewendet. 2) Wenn die Zeile "setenv PATH / testdir" an den PATH in Terminal.app angehängt wird, werden alle anderen PATH-Elemente in den Umgebungen von OS X-Anwendungen weggeblasen. 3) Wenn Sie "setenv PATH $ {PATH}: / testdir" in /etc/launchd.conf ausführen, wird der vorhandene $ PATH nicht ordnungsgemäß erweitert. 4) launchd.conf gilt für alle Benutzer anstatt nur für einen. Nicht dass ich eine bessere Lösung hätte.
NoahR
257

So legen Sie die Umgebung für neue Prozesse fest, die von Spotlight gestartet wurden (ohne dass ein Neustart erforderlich ist)

Sie können die Umgebung festlegen, die von launchd (und damit auch von Spotlight aus) verwendet wird launchctl setenv. Zum Beispiel, um den Pfad festzulegen:

launchctl setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

Oder wenn Sie Ihren Pfad in .bashrcoder ähnlich einrichten möchten, lassen Sie ihn in launchd spiegeln:

PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
launchctl setenv PATH $PATH

Es ist kein Neustart erforderlich obwohl Sie eine App neu starten müssen, wenn sie die geänderte Umgebung übernehmen soll.

Dies schließt alle Shells ein, die bereits unter Terminal.app ausgeführt werden. Wenn Sie jedoch dort sind, können Sie die Umgebung direkter einstellen, z. B. mit export PATH=/opt/local/bin:/opt/local/sbin:$PATH for bash oder zsh.

So behalten Sie Änderungen nach einem Neustart bei

Um Änderungen nach einem Neustart beizubehalten, können Sie die Umgebungsvariablen /etc/launchd.confwie folgt festlegen :

setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

launchd.conf wird beim Neustart automatisch ausgeführt.

Wenn diese Änderungen jetzt wirksam werden sollen, sollten Sie diesen Befehl zur launchctl.conferneuten Verarbeitung verwenden (danke @mklement für den Tipp!)

egrep -v '^\s*#' /etc/launchd.conf | launchctl

Mit dem Befehl erfahren Sie mehr darüber launchctlund wie es geladen wird .launchd.confman launchctl

Matt Curtis
quelle
2
Sehr schön! Der Vorteil der Verwendung von environment.plist scheint jedoch darin zu liegen, dass OS X den Inhalt dieser Dateien berücksichtigt, ohne dass zuerst ein Terminal gestartet werden muss. Wie auch immer, ich denke, Ihre Antwort konzentrierte sich hauptsächlich darauf, die Notwendigkeit eines Neustarts zu vermeiden, also danke dafür.
fotNelton
2
@kapuzineralex Ja, es vermeidet einen Neustart und ändert auch die Umgebung für Programme, die mit Spotlight gestartet wurden, was environment.plistnicht funktioniert.
Matt Curtis
2
Das Einstellen der Umgebung auf diese Weise funktionierte nur für mich, bis ich neu gestartet habe. Die Umgebungsvariable hielt nicht an, nachdem ich den Mac neu gestartet hatte. Matthews Antwort funktionierte perfekt für mich.
Shamal Karunarathne
8
@Shamal: Ich + 1 habe Ihren Kommentar abgegeben, aber denken Sie daran, dass Matthews Antwort einen Neustart erfordert , während ich auf den richtigen Weg hinweise, ihn ohne Neustart zu ändern. Wenn Sie beides möchten, schlage ich vor, dass Sie Ihre Pfadeinstellungen in die Datei launchd.conf einfügen (damit sie auch bei Neustarts bestehen bleiben) und dann ein Skript mit der folgenden Bezeichnung verwenden: "source /etc/launchctl.conf; launchctl setenv PATH $ PATH" Sie können auch "aktualisieren", wenn Sie nicht neu starten möchten.
Matt Curtis
5
@MattCurtis Könnten Sie bitte Ihre Antwort direkt bearbeiten , um zu verdeutlichen, dass die Änderungen nach einem Neustart tatsächlich verloren gehen , obwohl kein Neustart erforderlich ist ? Der richtige Weg, um Änderungen etc/launchd.confvor einem Neustart anzuwenden , besteht darin, den Ansatz in der Antwort von @ MatthewMcCullough zu verwenden : egrep "^setenv\ " /etc/launchd.conf | xargs -t -L 1 launchctl.
mklement0
106

Bis einschließlich OS X 10.7 (Lion) können Sie sie einstellen in:

~/.MacOSX/environment.plist

Sehen:

Für PATH im Terminal sollten Sie in der Lage sein, .bash_profileoder .profile(Sie müssen es wahrscheinlich erstellen)

Für OS X 10.8 (Mountain Lion) und darüber hinaus müssen Sie launchdund verwendenlaunchctl .

tim_yates
quelle
4
Dies ist nur möglich, wenn Sie tatsächlich erwarten, dass sie von grafischen Apps verwendet werden. Da diese normalerweise keine Umgebungsvariablen verwenden, ist es kein sehr guter Ort, um sie festzulegen.
Chris Hanson
18
Es gibt einige sehr gute Beispiele für grafische Apps, die Umgebungsvariablen verwenden. IntelliJ möchte beispielsweise M2_HOME sehen können, um zu wissen, wo Maven lebt. Damit die Variable angezeigt wird, müssen Sie sie in /etc/launchd.conf anstelle von environment.plist festlegen.
Matthew McCullough
3
Als Referenz: Die Verwendung preferences.plistwar unter OS X 10.5 weniger als ideal, da zu diesem Zeitpunkt preferences.plistnicht für Anwendungen gelesen wurde, die über Spotlight gestartet wurden. Siehe den Kommentar von Louis zu Matthews Antwort und email.esm.psu.edu/pipermail/macosx-emacs/2010-May /002113.html . Für OS X 10.6 environment.plistfunktioniert genau so, wie es sollte.
Janus
16
Dies gilt nicht mehr für OSX 10.8 apple.stackexchange.com/questions/57385/…
thatsmydoing
1
@tim_yates Könnten Sie bitte die erste Zeile Ihrer Antwort mit "Bis einschließlich Lion (10. * 7 *)" bearbeiten, vorausgesetzt , das ist richtig? Ich habe versucht, diese Bearbeitung an dem ursprünglichen, mehrdeutigen "Up to Mountain Lion" vorzunehmen, und die Rezensenten haben sie verpfuscht.
mklement0
67

Lösung für Befehlszeilen- und GUI-Anwendungen aus einer Hand (funktioniert mit Mac OS X 10.10 (Yosemite) und Mac OS X 10.11 (El Capitan))

Nehmen wir an, Sie haben Umgebungsvariablendefinitionen ~/.bash_profilewie folgt im folgenden Snippet:

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/opt/go/libexec/bin:$GOPATH/bin"
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

Wir benötigen einen Launch Agent, der bei jeder Anmeldung und bei Bedarf jederzeit ausgeführt wird und diese Variablen in die Benutzersitzung lädt. Wir benötigen außerdem ein Shell-Skript, um diese Definitionen zu analysieren und die erforderlichen Befehle zu erstellen, die vom Agenten ausgeführt werden müssen.

Erstellen Sie eine Datei mit dem plistSuffix (z. B. benannt osx-env-sync.plist) in einem ~/Library/LaunchAgents/Verzeichnis mit folgendem Inhalt:

<?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>osx-env-sync</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-l</string>
    <string>-c</string>
    <string>
      $HOME/.osx-env-sync.sh
    </string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

-lParameter ist hier kritisch; Es ist erforderlich, das Shell-Skript mit einer Login-Shell auszuführen , damit ~/.bash_profilees zuerst bezogen wird, bevor dieses Skript ausgeführt wird.

Nun das Shell-Skript. Erstellen Sie es ~/.osx-env-sync.shmit den folgenden Inhalten:

grep export $HOME/.bash_profile | while IFS=' =' read ignoreexport envvar ignorevalue; do
  launchctl setenv ${envvar} ${!envvar}
done

Stellen Sie sicher, dass das Shell-Skript ausführbar ist:

chmod +x ~/.osx-env-sync.sh

Laden Sie nun den Startagenten für die aktuelle Sitzung:

launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

(Neu) Starten Sie eine GUI-Anwendung und überprüfen Sie, ob sie die Umgebungsvariablen lesen kann.

Das Setup ist dauerhaft. Es wird Neustarts und Neuanmeldungen überleben.

Wenn Sie nach der ~/.bash_profileErsteinrichtung (die Sie gerade durchgeführt haben) Änderungen in Ihrer gesamten Umgebung erneut widerspiegeln möchten, führt das erneute Ausführen des launchctl load ...Befehls nicht das aus, was Sie möchten. Stattdessen erhalten Sie eine Warnung wie die folgende:

<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress

Gehen Sie wie folgt vor, um Ihre Umgebungsvariablen neu zu laden, ohne den Abmelde- / Anmeldevorgang durchlaufen zu müssen:

launchctl unload ~/Library/LaunchAgents/osx-env-sync.plist
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

Stellen Sie schließlich sicher, dass Sie Ihre bereits ausgeführten Anwendungen (einschließlich Terminal.app) neu starten, um sie auf die Änderungen aufmerksam zu machen.

Ich habe auch den Code und die Erklärungen hier in ein GitHub-Projekt übertragen: osx-env-sync .

Ich hoffe, dass dies die ultimative Lösung sein wird, zumindest für die neuesten Versionen von OS X (Yosemite & El Capitan).

Ersin Er
quelle
Funktioniert gut. Etwas besorgt, ob dies populär wurde, wenn es eine Sicherheitslücke sein würde
Warren P
3
Diese Lösung war die einzige, bei der ich richtig arbeiten konnte. Tolle Lösungen. Ich kann nicht verstehen, warum dies auf dem Mac so schwer sein sollte ...
JohnyTex
2
Bei El Capitan funktioniert das leider nicht. Ihr Kommentar von github.com/ersiner/osx-env-sync/issues/1#issuecomment-169803508 erklärt das Problem gut.
mgol
1
Diese Lösung funktioniert also nicht, /etc/launchd.conf hat keine Auswirkung, Node.js installiert seine Binärdatei in / usr / local / bin und dieser Pfad befindet sich nicht in PATH für GUI-Apps. Daher funktionieren Git-Hooks mit Node in GUI-Git-Apps wie SourceTree in El Capitan überhaupt nicht. Das ist fürchterlich.
mgol
1
Das Problem betrifft nur die Variable PATH. Ich hoffe, wir können bald eine Lösung finden.
Ersin Er
54
  1. Tun:

    vim ~/.bash_profile

    Die Datei ist möglicherweise nicht vorhanden (wenn nicht, können Sie sie einfach erstellen).

  2. Geben Sie dies ein und speichern Sie die Datei:

    export PATH=$PATH:YOUR_PATH_HERE
  3. Lauf

    source ~/.bash_profile
WoooHaaaa
quelle
+1 exportist, was ich vorschlagen wollte, da BASH nicht unterstütztsetenv
vol7ron
Funktioniert vorerst. Das Ganze sieht viel komplizierter aus als ich dachte. Muss später etwas mehr Zeit für all dies aufwenden. Vielen Dank.
Ruto Collins
34

Beim Umgang mit Umgebungsvariablen in OS X sind im Wesentlichen zwei Probleme zu lösen. Das erste ist das Aufrufen von Programmen über Spotlight (das Lupensymbol auf der rechten Seite des Mac-Menüs / der Statusleiste) und das zweite beim Aufrufen von Programmen über das Dock . Das Aufrufen von Programmen von einer Terminal - Anwendung / Nutzen ist trivial , weil sie die Umwelt vor den Standard - Shell Standorten lesen ( ~/.profile, ~/.bash_profile, ~/.bashrc, etc.)

Verwenden Sie beim Aufrufen von Programmen vom Dock aus, ~/.MacOSX/environment.plist wo das <dict>Element eine Folge von <key>KEY</key><string>theValue</string>Elementen enthält.

Stellen Sie beim Aufrufen von Programmen über Spotlight sicher, dass launchd mit allen erforderlichen Schlüssel- / Werteinstellungen eingerichtet wurde.

Um beide Probleme gleichzeitig zu lösen, verwende ich ein Anmeldeelement (das über das Tool "Systemeinstellungen" festgelegt wurde) in meinem Benutzerkonto. Das Anmeldeelement ist ein Bash-Skript, das eine Emacs-Lisp-Funktion aufruft, obwohl man natürlich sein bevorzugtes Skript-Tool verwenden kann, um dasselbe zu erreichen. Dieser Ansatz hat den zusätzlichen Vorteil, dass er jederzeit funktioniert und keinen Neustart erfordert. Das heißt, man kann ~/.profiledas Anmeldeelement in einer Shell bearbeiten , ausführen und die Änderungen für neu aufgerufene Programme entweder vom Dock oder von Spotlight aus sichtbar machen.

Einzelheiten:

Login-Element: ~/bin/macosx-startup

#!/bin/bash
bash -l -c "/Applications/Emacs.app/Contents/MacOS/Emacs --batch -l ~/lib/emacs/elisp/macosx/environment-support.el -f generate-environment"

Emacs Lisp Funktion: ~/lib/emacs/elisp/macosx/envionment-support.el

;;; Provide support for the environment on Mac OS X

(defun generate-environment ()
  "Dump the current environment into the ~/.MacOSX/environment.plist file."
  ;; The system environment is found in the global variable:
  ;; 'initial-environment' as a list of "KEY=VALUE" pairs.
  (let ((list initial-environment)
        pair start command key value)
    ;; clear out the current environment settings
    (find-file "~/.MacOSX/environment.plist")
    (goto-char (point-min))
    (setq start (search-forward "<dict>\n"))
    (search-forward "</dict>")
    (beginning-of-line)
    (delete-region start (point))
    (while list
      (setq pair (split-string (car list) "=")
            list (cdr list))
      (setq key (nth 0 pair)
            value (nth 1 pair))
      (insert "  <key>" key "</key>\n")
      (insert "  <string>" value "</string>\n")

      ;; Enable this variable in launchd
      (setq command (format "launchctl setenv %s \"%s\"" key value))
      (shell-command command))
    ;; Save the buffer.
    (save-buffer)))

HINWEIS: Diese Lösung ist eine Mischung aus denen, die vor dem Hinzufügen meiner Lösung entstanden sind, insbesondere die von Matt Curtis. Ich habe jedoch bewusst versucht, meine ~/.bash_profileInhaltsplattform unabhängig zu halten und die Einstellungen der launchdUmgebung (nur für Mac) in ein separates Skript zu integrieren .

pajato0
quelle
20
Beeindruckend. Ich sage nicht, dass dies nicht funktionieren wird, aber ... Ich bin nur entsetzt über die Komplexität, die erforderlich ist, um eine konsistente Umgebung unter OS X zu erhalten.
offby1
2
Dies funktioniert am besten unter allen Lösungen, die ich für 10.9 gesehen habe. Der einzige Fehler besteht darin, dass, da Anmeldeelemente in einer unbestimmten Reihenfolge ausgeführt werden, Emacs (zum Beispiel) beim Anmelden gestartet wird (weil es beispielsweise beim Abmelden geöffnet war), die Umgebungsvariablen nicht unbedingt vorhanden sind, es sei denn, Sie starten es neu , weil es gestartet wird, bevor Ihr Skript ist.
Telotortium
22

Eine andere kostenlose OpenSource-Lösung für Mac OS X 10.8 (Mountain Lion) -Einstellungsbereich / Umgebungs.plist ist EnvPane .

Der Quellcode von EnvPane ist auf GitHub verfügbar . EnvPane scheint vergleichbare Funktionen wie RCEnvironment zu haben, es scheint jedoch, dass es seine gespeicherten Variablen sofort aktualisieren kann, dh ohne dass ein Neustart oder eine Anmeldung erforderlich ist, was zu begrüßen ist.

Wie vom Entwickler angegeben:

EnvPane ist ein Einstellungsbereich für Mac OS X 10.8 (Mountain Lion), in dem Sie Umgebungsvariablen für alle Programme sowohl in grafischen als auch in Terminalsitzungen festlegen können. Es stellt nicht nur die Unterstützung für ~ / .MacOSX / environment.plist in Mountain Lion wieder her, sondern veröffentlicht auch Ihre Änderungen an der Umgebung sofort, ohne dass Sie sich abmelden und wieder anmelden müssen. <SNIP> EnvPane enthält (und installiert automatisch) a Startagent, der 1) früh nach der Anmeldung und 2) immer dann ausgeführt wird, wenn sich die ~ / .MacOSX / environment.plist ändert. Der Agent liest ~ / .MacOSX / environment.plist und exportiert die Umgebungsvariablen aus dieser Datei über dieselbe API, die von launchctl setenv und launchctl unsetenv verwendet wird, in die launchd-Instanz des aktuellen Benutzers.

Haftungsausschluss: Ich bin in keiner Weise mit dem Entwickler oder seinem Projekt verbunden.

PS Ich mag den Namen (klingt wie 'Ends Pain').

Big Rich
quelle
2
EnvPane kann PATH momentan nicht einstellen. Weitere Details finden Sie in meinem Fehlerbericht: github.com/hschmidt/EnvPane/issues/5
Uwe Günther
Ich ♥ ️ dieses Ding .. Einziger Nachteil .. von dem ich denke, dass JEDE Lösung ein Opfer sein wird .. ist - einen Prozess neu starten zu müssen - die neue "Umgebung" zu erben. Wonk Wonk.
Alex Gray
2
@sorin: Können Sie ein Problem auf der GitHub-Website mit einer Beschreibung des aufgetretenen Problems öffnen? EnvPane funktioniert für mich am 10.10. Haftungsausschluss: Ich bin der Autor von EnvPane.
Hannes
17

Update (04.08.2017)

Ab (mindestens) macOS 10.12.6 (Sierra) scheint diese Methode für Apache httpd nicht mehr zu funktionieren (für beide system als auch für die userOption von launchctl config). Andere Programme scheinen nicht betroffen zu sein. Es ist denkbar, dass dies ein Fehler in httpd ist.

Ursprüngliche Antwort

Dies betrifft OS X 10.10+ (10.11+, insbesondere aufgrund des Rootless-Modus, in dem /usr/bin nicht mehr beschreibbar ist).

Ich habe an mehreren Stellen gelesen, dass die Verwendung launchctl setenv PATH <new path>zum Festlegen der PATHVariablen aufgrund eines Fehlers in OS X (der aus persönlicher Erfahrung wahr zu sein scheint) nicht funktioniert. Ich habe festgestellt, dass es eine andere Möglichkeit PATHgibt, die für Anwendungen festgelegt werden kann, die nicht über die Shell gestartet wurden :

sudo launchctl config user path <new path>

Diese Option ist in der Manpage launchctl dokumentiert:

Konfigurationssystem | Benutzerparameterwert

Legt dauerhafte Konfigurationsinformationen für launchd (8) -Domänen fest. Es dürfen nur die Systemdomäne und die Benutzerdomänen konfiguriert werden. Der Speicherort des persistenten Speichers ist ein Implementierungsdetail, und Änderungen an diesem Speicher sollten nur über diesen Unterbefehl vorgenommen werden. Ein Neustart ist erforderlich, damit Änderungen, die über diesen Unterbefehl vorgenommen werden, wirksam werden.

[...]

Pfad

Setzt die Umgebungsvariable PATH für alle Dienste in der Zieldomäne auf den Zeichenfolgenwert. Der Zeichenfolgenwert sollte dem Format entsprechen, das für die Umgebungsvariable PATH in environ (7) angegeben ist. Beachten Sie, dass die dienstspezifische Umgebungsvariable Vorrang hat, wenn ein Dienst seinen eigenen Pfad angibt.

ANMERKUNG: Mit dieser Funktion können nicht allgemeine Umgebungsvariablen für alle Dienste innerhalb der Domäne festgelegt werden. Es ist absichtlich auf die PATH-Umgebungsvariable und nichts anderes aus Sicherheitsgründen ausgerichtet.

Ich habe bestätigt, dass dies mit einer GUI-Anwendung funktioniert, die vom Finder gestartet wurde (der getenvzum Abrufen von PATH verwendet wird). Beachten Sie, dass Sie dies nur einmal tun müssen und die Änderung durch Neustarts dauerhaft bleibt.

Max Leske
quelle
Das funktioniert auch bei mir. sudo launchctl procinfo <gui-pid>zeigt neu eingestellte PATHUmgebung. Aber sudo launchctl config user path <new path>tatsächlich für alle Benutzer festgelegt ... (bestätigt durch Hinzufügen eines neuen Benutzers und Verwenden der Python-Konsole von Sublime Text)
Bossliaw
1
Dies scheint keine Auswirkungen auf die Umgebungsvariable PATH von Anwendungen zu haben, die beim Anmelden erneut geöffnet werden (die beim Herunterfahren geöffnet waren).
Brecht Machiels
Interessant. Dies würde bedeuten, dass für Anwendungen, die erneut geöffnet werden, die Umgebung (oder eine Teilmenge davon) gespeichert wird.
Max Leske
@MaxLeske Nein, die wieder geöffneten Anwendungen werden gestartet, bevor die Umgebungsvariable geändert wird. Es ist also nicht nur das erste Mal sudo launchctl config user path, dass dies passiert (was Sie anscheinend annehmen?).
Brecht Machiels
1
@ShlomiSchwartz launchctltut nicht erlaubt Ihnen beliebige Umgebungsvariablen zu setzen. Die PATHVariable ist eine Ausnahme.
Max Leske
17

Auf Mountain Lion macht das alles /etc/pathsund das /etc/launchd.confBearbeiten keinen Effekt!

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 Anwendung direkt bearbeitet Info.plist(Rechtsklick auf "AppName.app" (in diesem Fall SourceTree) und dann " Show package contents").

Paketinhalt anzeigen

Und ich habe ein neues Schlüssel / Dikt-Paar hinzugefügt:

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

Geben Sie hier die Bildbeschreibung ein

Jetzt verwendet die Anwendung (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.

Flori
quelle
3
Diese Lösung erfüllt den Standard des am wenigsten aufdringlichen Systems. Vielen Dank.
John Vance
@ John Vance +1 Stimme voll und ganz zu, systemweite Änderungen sind immer riskant, wie Jason T. Miller in seiner Antwort klar erklärt
rmcsharry
5
In El Capitan hat das keine Auswirkungen auf mich. :(
mgol
Wenn ich in High Sierra Info.plistLSOpenURLsWithRole() failed with error -10810 for the file /Applications/Slack.app.
10.13
16

Während die Antworten hier nicht "falsch" sind, füge ich noch eine hinzu: Nehmen Sie in OS X niemals Änderungen an Umgebungsvariablen vor, die "alle Prozesse" oder sogar außerhalb der Shell für alle Prozesse betreffen, die von einem bestimmten Benutzer interaktiv ausgeführt werden.

Nach meiner Erfahrung führen globale Änderungen an Umgebungsvariablen wie PATH für alle Prozesse unter OS X sogar noch häufiger zu Problemen als unter Windows. Grund dafür ist, dass viele OS X-Anwendungen und andere Software (einschließlich möglicherweise insbesondere Komponenten des Betriebssystems selbst) auf UNIX-Befehlszeilentools unter der Haube angewiesen sind und das Verhalten der mit dem System gelieferten Versionen dieser Tools annehmen Verwenden Sie dabei nicht unbedingt absolute Pfade (ähnliche Kommentare gelten für dynamisch geladene Bibliotheken und DYLD_ * -Umgebungsvariablen). Bedenken Sie beispielsweise, dass die am besten bewerteten Antworten auf verschiedene Fragen zum Stapelüberlauf zum Ersetzen von OS X-Versionen von Interpreten wie Python und Ruby im Allgemeinen lauten: "Tun Sie dies nicht."

OS X unterscheidet sich in dieser Hinsicht nicht von anderen UNIX-ähnlichen Betriebssystemen (z. B. Linux, FreeBSD und Solaris). Der wahrscheinlichste Grund, warum Apple dies nicht einfach bietet, ist, dass es Dinge kaputt macht . In dem Maße, in dem Windows für diese Probleme nicht so anfällig ist, liegt dies an zwei Dingen: (1) Windows-Software ist in dem Maße nicht auf Befehlszeilentools angewiesen, wie dies bei UNIX-Software der Fall ist, und (2) Microsoft hat dies getan Eine derart umfangreiche Geschichte sowohl der "DLL-Hölle" als auch der Sicherheitsprobleme, die durch Änderungen verursacht wurden, die alle Prozesse betreffen, hat das Verhalten des dynamischen Ladens in neueren Windows-Versionen geändert, um die Auswirkungen "globaler" Konfigurationsoptionen wie PATH zu begrenzen.

"Lahm" oder nicht, Sie haben ein weitaus stabileres System, wenn Sie solche Änderungen auf kleinere Bereiche beschränken.

Jason T. Miller
quelle
1
Den Leuten zu sagen, dass sie das, was sie gefragt haben, nicht tun sollen, ist keine Antwort auf die Frage, die sie gestellt haben. Menschen daran zu hindern, dies zu tun, bricht auch Dinge. Apples Vorgehensweise.
Frabjous
Das Festlegen des Pfads in /Applications/App.app/Contents/Info.plist mit dem LSEnvironment-Schlüssel developer.apple.com/library/archive/documentation/General/… ist möglicherweise die derzeit empfohlene Lösung.
Dave X
15

Manchmal funktionieren alle vorherigen Antworten einfach nicht. Wenn Sie M2_HOMEin Eclipse oder in IntelliJ IDEA Zugriff auf eine Systemvariable (wie ) haben möchten , funktioniert in diesem Fall nur Folgendes für mich:

Bearbeiten Sie zuerst (Schritt 1), /etc/launchd.confum eine Zeile wie diese zu enthalten: "setenv VAR value", und starten Sie dann (Schritt 2) neu.

Das einfache Ändern von .bash_profile funktioniert nicht, da die Anwendungen in OS X nicht wie in anderen Unix-Versionen gestartet werden. Sie erben nicht die Shell-Variablen der Eltern. Alle anderen Änderungen funktionieren aus einem mir unbekannten Grund nicht. Vielleicht kann jemand anderes dies klären.

Bruno Ranschaert
quelle
5
Anwendungen, die von Spotlight oder auf andere Weise gestartet wurden, haben alle /etc/launchd.conf von ihrem übergeordneten Prozess gelesen. Dies macht dies zu einer attraktiven Wahl, um Umgebungsvariablen festzulegen, die in allen Apps und Shells sichtbar sind.
Matthew McCullough
1
Siehe meine Antwort für eine andere Lösung, die einen Neustart vermeidet - stackoverflow.com/questions/135688/…
Matt Curtis
Auf meinem MaxOS 10.6-Computer ist die Datei /etc/launchd.conf nicht vorhanden. Ist dies ab dieser Version entweder neu oder veraltet? Oder ist diese Maschine durcheinander?
Peterk
13

Nachdem ich den Einstellungsbereich für Umgebungsvariablen verfolgt und festgestellt habe, dass der Link fehlerhaft ist und eine Suche auf der Apple-Website darauf hinweist, dass sie ihn vergessen haben, bin ich wieder auf die Spur des schwer fassbaren Startvorgangs zurückgekehrt.

Auf meinem System (Mac OS X 10.6.8) scheint es , dass in environment.plist definierten Variablen sind auf Anwendungen zuverlässig exportiert von Spotlight gestartet (über launchd). Mein Problem ist, dass diese Variablen nicht in neue Bash-Sitzungen im Terminal exportiert werden. Dh ich habe das gegenteilige Problem wie hier dargestellt.

HINWEIS: environment.plist sieht wie zuvor beschrieben wie JSON und nicht wie XML aus

Ich konnte Spotlight-Apps durch Bearbeiten von ~ / MacOSX / environment.plist dazu bringen, die Variablen anzuzeigen, und ich konnte dieselben Variablen in eine neue Terminalsitzung zwingen, indem ich meiner .profile-Datei Folgendes hinzufügte:

eval $(launchctl export)
Russell B.
quelle
2
Nicht so schwer fassbar: RCenvironment
Gilimanjaro
Netter Tipp zum Launchctl-Export. Aber ich würde das nicht so wie es ist in .profile setzen. Ihr $ PATH wird mit einem überschrieben, der / usr / local / bin nicht enthält. Sie können jedoch einen regulären Ausdruck verwenden, um die Variablen auszuwählen, an denen Sie interessiert sind: `` eval $ (launchctl export | grep '^ my. * =').
Mivk
3
Auf meiner neuen Mountain Lion-Maschine (10.8.2) ist die environment.plist völlig wertlos. Siehe Matthews Antwort für den richtigen Weg. Alles dreht sich um den Start und die Launchctl-Befehlszeilen-App zusammen mit /etc/launchd.conf. Sie können bis Sie sich mit lesen man launchd, man launchctlund man launchd.confin einem Terminal - Fenster. Ich bin froh, dass Apple die Manpages auf dem neuesten Stand hält, auch wenn die Mac Developer Library etwas zurückbleibt.
Russell B
10

Jede der Bash Startdateien - ~/.bashrc, ~/.bash_profile, ~/.profile. Es gibt auch eine seltsame Datei, die ~/.MacOSX/environment.plistnach Umgebungsvariablen in GUI-Anwendungen benannt ist.

John Millikin
quelle
10

Ähnlich wie die Antwort, die Matt Curtis gegeben hat, habe ich Umgebungsvariablen über launchctl festgelegt, aber ich verpacke sie in eine Funktion namens export, sodass sie beim Exportieren einer Variablen wie normal in mein .bash_profile auch von launchctl festgelegt wird. Folgendes mache ich:

  1. Mein .bash_profile besteht nur aus einer Zeile (Dies ist nur eine persönliche Präferenz.)

    source .bashrc
  2. Mein .bashrc hat folgendes:

    function export()
    {
        builtin export "$@"
        if [[ ${#@} -eq 1 && "${@//[^=]/}" ]]
        then
            launchctl setenv "${@%%=*}" "${@#*=}"
        elif [[ ! "${@//[^ ]/}" ]]
        then
            launchctl setenv "${@}" "${!@}"
        fi
    }
    
    export -f export
  3. Das oben Gesagte überlastet den in Bash integrierten "Export" und exportiert alles normal (Sie werden feststellen, dass ich "Export" damit exportiere!). Anschließend stellen Sie sie für OS X-App-Umgebungen über launchctl richtig ein, unabhängig davon, ob Sie eine der folgenden Optionen verwenden:

    export LC_CTYPE=en_US.UTF-8
    # ~$ launchctl getenv LC_CTYPE
    # en_US.UTF-8
    PATH="/usr/local/bin:${PATH}"
    PATH="/usr/local/opt/coreutils/libexec/gnubin:${PATH}"
    export PATH
    # ~$ launchctl getenv PATH
    # /usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
    export CXX_FLAGS="-mmacosx-version-min=10.9"
    # ~$ launchctl getenv CXX_FLAGS
    # -mmacosx-version-min=10.9
  4. Auf diese Weise muss ich nicht jedes Mal jede Variable an launchctl senden, sondern ich kann einfach mein .bash_profile / .bashrc so einrichten, wie ich es möchte. Öffnen Sie ein Terminalfenster, überprüfen Sie Ihre Umgebungsvariablen, an denen Sie interessiert sind launchctl getenv myVar, ändern Sie etwas in Ihrem .bash_profile / .bashrc, schließen Sie das Terminalfenster und öffnen Sie es erneut, überprüfen Sie die Variable erneut mit launchctl, und voilá, es wurde geändert.

  5. Wie bei den anderen Lösungen für die Post-Mountain Lion-Welt müssen auch bei neuen Umgebungsvariablen, die für Apps verfügbar sind, diese nach der Änderung gestartet oder neu gestartet werden.

courtlandj
quelle
1
Nützliche Antwort - danke. Ich habe es gerade aktualisiert, weil Ihre ursprüngliche Lösung keine Fälle behandelt hat, in denen der Wert der von Ihnen festgelegten Umgebungsvariablen Gleichheitszeichen enthielt (z. B. CXX_FLAGS = "- mmacosx-version-min = 10.9"
Steve Broberg
@SteveBroberg - nur eine Änderung des Zeichens behebt den Bash-regulären Ausdruck, ohne sed zu benötigen! (
Versteh
1
Ich dachte, es müsste einen besseren Weg geben, aber ich bin kein Bash-Guru, und ich konnte nicht googeln, was %%, ## usw. waren
Steve Broberg
10

Hier ist eine sehr einfache Möglichkeit, das zu tun, was Sie wollen. In meinem Fall brachte es Gradle zum Laufen (für Android Studio).

  • Terminal öffnen.
  • Führen Sie den folgenden Befehl aus:

    sudo nano /etc/paths oder sudo vim /etc/paths

  • Geben Sie Ihr Passwort ein, wenn Sie dazu aufgefordert werden.

  • Gehen Sie zum Ende der Datei und geben Sie den Pfad ein, den Sie hinzufügen möchten.
  • Drücken Sie Control+, Xum das Programm zu beenden.
  • Geben Sie 'Y' ein, um den geänderten Puffer zu speichern.
  • Öffnen Sie ein neues Terminalfenster und geben Sie Folgendes ein:

    echo $PATH

Sie sollten den neuen Pfad sehen, der an das Ende des Pfads angehängt ist.

Ich habe diese Details aus diesem Beitrag erhalten:

Fügen Sie dem Pfad unter Mac OS X 10.8 Mountain Lion und höher hinzu

wired00
quelle
7

Um genau zu sein, wofür jede Datei bestimmt ist

  • ~/.profile wird bei jedem Start von Terminal.app bezogen
  • ~/.bashrc Hier werden "traditionell" alle Exportanweisungen für die Bash-Umgebung festgelegt
  • /etc/paths ist die Hauptdatei in Mac OS, die die Liste der Standardpfade zum Erstellen der Umgebungsvariablen PATH für alle Benutzer enthält
  • /etc/paths.d/ enthält Dateien, die zusätzliche Suchpfade enthalten

Nicht-Terminal-Programme erben nicht die systemweiten PATH- und MANPATH-Variablen, die Ihr Terminal ausführt! Um die Umgebung für alle von einem bestimmten Benutzer gestarteten Prozesse festzulegen und damit Umgebungsvariablen für Mac OS X-GUI-Anwendungen verfügbar zu machen, müssen diese Variablen in Ihrem ~/.MacOSX/environment.plist(Apple Technical Q & A QA1067) definiert werden.

Verwenden Sie die folgende Befehlszeile zu synchronisieren environment.plistmit /etc/paths:

defaults write $HOME/.MacOSX/environment PATH "$(tr '\n' ':' </etc/paths)"
Claudio Floreani
quelle
6

/etc/launchd.conf wird in OS X 10.10 (Yosemite), OS X 10.11 (El Capitan), macOS 10.12 (Sierra) oder macOS 10.13 (High Sierra) nicht verwendet.


Von der launchctlManpage:

/etc/launchd.conf file is no longer consulted for subcommands to run during early boot time;
this functionality was removed for security considerations.

Die in dieser Antwort " Unterschiedliche Fragen" beschriebene Methode funktioniert für mich (nach einem Neustart): Anwendungen, die über das Dock oder über Spotlight gestartet wurden, erben Umgebungsvariablen, die ich festgelegt habe ~/Library/LaunchAgents/my.startup.plist. (In meinem Fall musste ich Satz LANG, um en_US.UTF-8für einen Sublime Text Plugin.)

David
quelle
Gibt es beim Neustart eine Ladereihenfolge, die sicherstellt, dass my.startup.plist geladen wurde, bevor Anwendungen aus der letzten Sitzung neu gestartet wurden?
Kunjbhai
3

Es ist einfach:

Bearbeiten Sie ~ / .profile und geben Sie Ihre Variablen wie folgt ein

$ vim ~ / .profile

In Datei legen:

MY_ENV_VAR = Wert

  1. Speichern (: wq)

  2. Starten Sie das Terminal neu (Beenden Sie es und öffnen Sie es erneut)

  3. Stellen Sie sicher, dass alles in Ordnung ist:

$ echo $ MY_ENV_VAR

$ value


Fernando Martínez
quelle
3

Verwenden Sie für eine einzelne Benutzermodifikation die ~/.profilevon Ihnen aufgelisteten. Der folgende Link erklärt, wann die verschiedenen Dateien von Bash gelesen werden.

http://telin.ugent.be/~slippens/drupal/bashrc_and_others

Wenn Sie die Umgebungsvariable für GUI-Anwendungen festlegen möchten, benötigen Sie die Datei ~ / .MacOSX / environment.plist

mmaibaum
quelle
3

Nun, ich bin mir nicht sicher über die /etc/pathsund ~/.MacOSX/environment.plistDateien. Die sind neu.

Bei Bash sollten Sie jedoch wissen, dass dies .bashrcbei jedem neuen Shell-Aufruf .bash_profileausgeführt wird und beim Start nur einmal ausgeführt wird.

Ich weiß nicht, wie oft dies unter Mac OS X der Fall ist. Ich denke, die Unterscheidung ist zusammengebrochen, als das Fenstersystem alles gestartet hat.

Persönlich beseitige ich die Verwirrung, indem ich eine .bashrcDatei mit allem, was ich brauche, erstelle und dann Folgendes tue:

ln -s .bashrc .bash_profile
mike511
quelle
3

Zusätzlich zu den vorgeschlagenen Ansätzen ist zu beachten, dass zumindest in OS X 10.5 (Leopard) die eingestellten Variablen launchd.confmit den vorgenommenen Einstellungen zusammengeführt werden .profile. Ich nehme an, dass dies wahrscheinlich auch für die Einstellungen in gültig ist ~/.MacOSX/environment.plist, aber ich habe es nicht überprüft.

MiB
quelle
3

Richten Sie Ihre PATH-Umgebungsvariable unter Mac OS ein

Öffnen Sie das Terminal-Programm (dies befindet sich standardmäßig in Ihrem Ordner "Programme / Dienstprogramme"). Führen Sie den folgenden Befehl aus

touch ~/.bash_profile; open ~/.bash_profile

Dadurch wird die Datei in Ihrem Standardtexteditor geöffnet.

Für Android SDK als Beispiel:

Sie müssen den Pfad zu Ihrem Android SDK-Plattform-Tools- und Tools-Verzeichnis hinzufügen. In meinem Beispiel verwende ich "/ Development / android-sdk-macosx" als Verzeichnis, in dem das SDK installiert ist. Fügen Sie die folgende Zeile hinzu:

export PATH=${PATH}:/Development/android-sdk-macosx/platform-tools:/Development/android-sdk-macosx/tools

Speichern Sie die Datei und beenden Sie den Texteditor. Führen Sie Ihr .bash_profile aus, um Ihren PATH zu aktualisieren:

source ~/.bash_profile

Jedes Mal, wenn Sie das Terminal-Programm öffnen, enthält Ihr PATH das Android SDK.

Charaf JRA
quelle
3

Hab das einfach und schnell gemacht. Erstellen Sie zuerst ein ~ / .bash_profile vom Terminal:

touch .bash_profile

dann

open -a TextEdit.app .bash_profile

hinzufügen

export TOMCAT_HOME=/Library/Tomcat/Home

Speichern Sie das Dokument und Sie sind fertig.

CodeOverRide
quelle
Perfecto. Ich habe die Schritte für JAVA_HOME befolgt. Ich habe gerade den Export JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.8.0_201.jdk / Contents / Home hinzugefügt und bin sehr schnell erfolgreich!
NarendraC
Tolles @NarendraC!
CodeOverRide
2

Es ist ganz einfach. Datei bearbeiten .profile(vi, nano , Sublime Text oder anderer Texteditor). Sie können es im ~/Verzeichnis (Benutzerverzeichnis) finden und wie folgt einstellen:

export MY_VAR=[your value here]

Beispiel mit Java home:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/current

Speichern Sie es und kehren Sie zum Terminal zurück.

Sie können es neu laden mit:

source .profile

Oder schließen und öffnen Sie Ihr Terminalfenster.

francois.robert
quelle
2

Hier gibt es zwei Arten von Muscheln.

  • Nicht angemeldet: .bashrc wird jedes Mal neu geladen, wenn Sie eine neue Kopie von Bash starten
  • Login: Das .profile wird nur geladen, wenn Sie sich entweder anmelden oder Bash explizit anweisen, es zu laden und als Login-Shell zu verwenden.

Es ist wichtig , hier zu verstehen , dass mit Bash, Datei .bashrcnur von einer Hülle , die sowohl interaktiv als auch nicht-Login ist gelesen wird, und Sie werden feststellen , dass die Menschen oft laden finden .bashrcin .bash_profilezu überwinden diese Einschränkung.

Nachdem Sie das Grundverständnis haben, gehen wir weiter zu dem Punkt, an dem ich Ihnen raten würde, es einzurichten.

  • .profile: nicht vorhanden erstellen. Fügen Sie dort Ihr PATH-Setup ein.
  • .bashrc: erstellen, wenn nicht vorhanden. Fügen Sie dort alle Ihre Aliase und benutzerdefinierten Methoden ein.
  • .bash_profile: erstellen, falls nicht vorhanden. Geben Sie Folgendes ein.

.bash_file:

#!/bin/bash
source ~/.profile # Get the PATH settings
source ~/.bashrc  # Get Aliases and Functions
#
ZOXIS
quelle
2

Login Shells

/etc/profile

Die Shell führt zuerst die Befehle in der Datei aus /etc/profile. Ein Benutzer, der mit Root-Rechten arbeitet, kann diese Datei einrichten, um systemweite Standardmerkmale für Benutzer festzulegen, die Bash ausführen.

.bash_profile
.bash_login
.profile

Als nächstes sucht die Shell in dieser Reihenfolge nach ~/.bash_profile, ~/.bash_loginund ~/.profile(~ / ist die Abkürzung für Ihr Home-Verzeichnis) und führt die Befehle in der ersten dieser gefundenen Dateien aus. Sie können Befehle in eine dieser Dateien einfügen, um die eingestellten Standardeinstellungen zu überschreiben /etc/profile. Eine Shell, die auf einem virtuellen Terminal ausgeführt wird, führt in diesen Dateien keine Befehle aus.

.bash_logout

Wenn Sie sich abmelden, führt bash Befehle in der aus ~/.bash_logout Datei aus. Diese Datei enthält häufig Befehle, die nach einer Sitzung bereinigt werden, z. B. Befehle zum Entfernen temporärer Dateien.

Interaktive Nonlogin-Shells

/etc/bashrc

Obwohl nicht direkt von bash aufgerufen, werden viele ~/.bashrcDateien aufgerufen /etc/bashrc. Mit diesem Setup kann ein Benutzer, der mit Root-Rechten arbeitet, systemweite Standardmerkmale für Bash-Shells ohne Anmeldung festlegen.

.bashrc

Eine interaktive Nonlogin-Shell führt Befehle in der ~/.bashrcDatei aus. In der Regel wird .bash_profilediese Datei in einer Startdatei für eine Anmeldeshell ausgeführt, z. B. in Anmelde- und Nicht-Anmeldeshells .bashrc.

Da Befehle in häufig .bashrcausgeführt werden können und Subshells exportierte Variablen erben, empfiehlt es sich, Befehle in die .bash_profileDatei aufzunehmen , die zu vorhandenen Variablen hinzugefügt werden.

Koray Tugay
quelle
2

Die ganze Magie unter iOS geht nur mit der Verwendung sourceder Datei einher, in die Sie Ihre Umgebungsvariablen exportieren.

Zum Beispiel:

Sie können eine Datei wie folgt erstellen:

export bim=fooo
export bom=bar

Speichern Sie diese Datei unter bimbom.envund tun Sie dies source ./bimbom.ev. Voilá, du hast deine Umgebungsvariablen.

Überprüfen Sie sie mit:

echo $bim
suther
quelle
1

Versuchen Sie für Bash, Ihre Umgebungsvariablen zur Datei hinzuzufügen /etc/profile, um sie allen Benutzern zur Verfügung zu stellen. Kein Neustart erforderlich, starten Sie einfach eine neue Terminalsitzung.

Rabi
quelle