Wie kann eine Umgebungsvariable in .bashrc am besten festgelegt werden?

11

Soll .bashrcich diese beim Einrichten einer Variablen in verwenden?

export VAR=value

Oder wäre das genug?

VAR=value

Was genau ist der Unterschied (falls es einen gibt)?

Flávio Amieiro
quelle

Antworten:

16

Die beste Weise

export VAR=value

Der Unterschied

Tun

VAR=value

Legt die Variable nur für die Dauer des Skripts fest ( .bashrcin diesem Fall). Untergeordnete Prozesse (falls vorhanden) des Skripts haben keine VAR definiert, und sobald das Skript beendet VARwird, ist es nicht mehr vorhanden.

export VAR=value

Fügt explizit VARzur Liste der Variablen hinzu, die an untergeordnete Prozesse übergeben werden. Willst du es versuchen? Öffnen Sie eine Shell

PS1="foo > "
bash --norc

Die neue Shell erhält die Standardaufforderung. Wenn du stattdessen so etwas machst

export PS1="foo > "
bash --norc

Die neue Shell erhält die Eingabeaufforderung, die Sie gerade festgelegt haben.

Update: Wie Ian Kelling unten feststellt, .bashrcbleiben die in gesetzten Variablen in der Shell erhalten, aus der sie stammen .bashrc. Allgemeiner gesagt, wenn die Shell ein Skript (unter Verwendung des source scriptnameBefehls) verwendet, bleiben die im Skript festgelegten Variablen für die Lebensdauer der Shell bestehen.

agnul
quelle
1
"Setzt die Variable nur für die Dauer des Skripts (in diesem Fall .bashrc)" Das ist falsch / irreführend. Auf diese Weise festgelegte Variablen bleiben in der interaktiven Shell erhalten, die .bashrc liest.
Ian Kelling
PS1ist ein schlechtes Beispiel für eine Variable, die als Umgebungsvariable exportiert werden soll. Es ist nur für untergeordnete Prozesse von Bedeutung, die Shells sind, und wird von verschiedenen Shells (z. B. Bash und Dash) unterschiedlich interpretiert. Es wird empfohlen, es einfach als reguläre Shell-Variable in der zu setzen .bashrc. Bessere Beispiele für Umgebungsvariablen umfassen HOME, PATH, EDITORetc.
Anthony Geoghegan
10

Beide scheinen gut zu funktionieren, aber durch die Verwendung des Exports wird sichergestellt, dass die Variable für Subshells und andere Programme verfügbar ist. Um dies zu testen, versuchen Sie dies.

Fügen Sie diese beiden Zeilen zu Ihrer .bashrc-Datei hinzu

TESTVAR="no export"
export MYTESTVAR="with export"

Öffnen Sie dann eine neue Shell.

Laufen echo $TESTVARund echo $MYTESTVARwird den Inhalt der einzelnen Variablen zeigen. Entfernen Sie nun innerhalb derselben Shell diese beiden Zeilen aus Ihrer .bashrc-Datei und führen Sie sie aus bash, um eine Subshell zu starten.

Beim Ausführen echo $TESTVARwird eine leere Ausgabe echo $MYTESTVARangezeigt, beim Ausführen wird jedoch "mit Export" angezeigt.

Mike H.
quelle