Festlegen von Umgebungsvariablen unter Linux mit Bash

73

In tcshfunktioniert das folgende Skript:

#!/bin/tcsh
setenv X_ROOT /some/specified/path

setenv XDB    ${X_ROOT}/db
setenv PATH   ${X_ROOT}/bin:${PATH}

xrun -d xdb1 -i $1 > $2

Was entspricht der tcsh setenvFunktion in Bash?

Gibt es ein direktes Analogon? Die Umgebungsvariablen dienen zum Auffinden der ausführbaren Datei.

pbh101
quelle

Antworten:

111

export VAR=valuesetzt VAR auf value. Schließen Sie es in einfache Anführungszeichen ein, wenn Sie Leerzeichen möchten, wie z export VAR='my val'. Wenn Sie möchten, dass die Variable interpoliert wird, verwenden Sie z. B. doppelte Anführungszeichen export VAR="$MY_OTHER_VAR".

Mipadi
quelle
4
PS: Die doppelten Anführungszeichen im letzten sind nicht erforderlich. Die Shell führt keine Wortaufteilung für Variablenzuweisungen durch.
Jens
35

Der Grund, warum Leute oft vorschlagen, zu schreiben

VAR=value
export VAR

statt der kürzeren

export VAR=value

ist, dass die längere Form in mehr verschiedenen Schalen arbeitet als die kurze Form. Wenn Sie wissen, dass Sie es zu tun haben bash, funktioniert beides natürlich einwandfrei.

Zaphod
quelle
27

Legen Sie mit Bash unter Linux eine lokale Variable und eine Umgebungsvariable fest

Suchen Sie in Bash nach lokalen oder Umgebungsvariablen für eine Variable namens LOL:

el@server /home/el $ set | grep LOL
el@server /home/el $
el@server /home/el $ env | grep LOL
el@server /home/el $

Sanity Check, keine lokale oder Umgebungsvariable namens LOL.

Legen Sie eine lokale Variable namens LOL in einer lokalen, aber nicht in einer Umgebung fest. So stellen Sie es ein:

el@server /home/el $ LOL="so wow much code"
el@server /home/el $ set | grep LOL
LOL='so wow much code'
el@server /home/el $ env | grep LOL
el@server /home/el $

Die Variable 'LOL' existiert in lokalen Variablen, jedoch nicht in Umgebungsvariablen. LOL verschwindet, wenn Sie das Terminal neu starten, sich abmelden / anmelden oder ausführen exec bash.

Legen Sie eine lokale Variable fest und löschen Sie dann alle lokalen Variablen in Bash

el@server /home/el $ LOL="so wow much code"
el@server /home/el $ set | grep LOL
LOL='so wow much code'
el@server /home/el $ exec bash
el@server /home/el $ set | grep LOL
el@server /home/el $

Sie können auch nur die eine Variable deaktivieren:

el@server /home/el $ LOL="so wow much code"
el@server /home/el $ set | grep LOL
LOL='so wow much code'
el@server /home/el $ unset LOL
el@server /home/el $ set | grep LOL
el@server /home/el $

Lokale Variable LOL ist weg.

Heraufstufen einer lokalen Variablen zu einer Umgebungsvariablen:

el@server /home/el $ DOGE="such variable"
el@server /home/el $ export DOGE
el@server /home/el $ set | grep DOGE
DOGE='such variable'
el@server /home/el $ env | grep DOGE
DOGE=such variable

Beachten Sie, dass beim Exportieren sowohl eine lokale Variable als auch eine Umgebungsvariable angezeigt wird.

Die oben exportierte Variable DOGE überlebt einen Bash-Reset:

el@server /home/el $ exec bash
el@server /home/el $ env | grep DOGE
DOGE=such variable
el@server /home/el $ set | grep DOGE
DOGE='such variable'

Deaktivieren Sie alle Umgebungsvariablen:

Sie müssen eine Dose Chuck Norris herausziehen, um alle Umgebungsvariablen ohne Abmelden / Anmelden zurückzusetzen:

el@server /home/el $ export CAN="chuck norris"
el@server /home/el $ env | grep CAN
CAN=chuck norris
el@server /home/el $ set | grep CAN
CAN='chuck norris'
el@server /home/el $ env -i bash
el@server /home/el $ set | grep CAN
el@server /home/el $ env | grep CAN

Sie haben eine Umgebungsvariable erstellt und dann das Terminal zurückgesetzt, um sie zu entfernen.

Oder Sie können eine Umgebungsvariable manuell wie folgt festlegen und deaktivieren:

el@server /home/el $ export FOO="bar"
el@server /home/el $ env | grep FOO
FOO=bar
el@server /home/el $ unset FOO
el@server /home/el $ env | grep FOO
el@server /home/el $
Eric Leschinski
quelle
11

VAR=value setzt VAR auf value.

Danach export VARwird es auch untergeordneten Prozessen gegeben.

export VAR=value ist eine Abkürzung für beides.

iny
quelle
3
gibt es es nicht an übergeordnete Prozesse, nicht an Kinder? Wenn ein Shell-Skript einen Export ausführt, hat die Shell, mit der ich es aufgerufen habe, die Variable IIRC.
Rmeador
3
Nein. "Sind für den automatischen Export von anschließend ausgeführten Befehlen in die Umgebung markiert." Dies bedeutet, dass untergeordnete Prozesse nach dem Export ausgeführt werden.
Iny
1
Woher kommt dieses Zitat aus Neugier?
pbh101
7

Ich denke, Sie suchen export- obwohl ich mich irren könnte. Ich habe noch nie mit tcsh gespielt. Verwenden Sie die folgende Syntax:

export VARIABLE=value
Oli
quelle