So verwendest du den Befehl ›export‹ unter Linux
Der Linux-Befehl export ist ein integrierter Shell-Befehl, der Variablen und Funktionen für die Vererbung an untergeordnete Prozesse markiert. Ohne export bleibt eine in der aktuellen Shell erstellte Variable auf diese Shell beschränkt und kann von daraus gestarteten Skripten oder Subprozessen nicht gelesen werden. Nachdem eine Variable exportiert wurde, wird sie zu einer Umgebungsvariable, auf die untergeordnete Prozesse zugreifen können.
Dieser Leitfaden erklärt, wie der Befehl export funktioniert, beschreibt seine verfügbaren Optionen anhand praktischer Beispiele, zeigt, wie exportierte Variablen über mehrere Sitzungen hinweg erhalten bleiben, vergleicht export mit verwandten Befehlen und erläutert die Behebung typischer Probleme.
Wichtigste Erkenntnisse
- Der Befehl
exportwandelt eine Shell-Variable in eine Umgebungsvariable um, auf die untergeordnete Prozesse zugreifen können. - Eine ohne
exporterstellte Variable bleibt eine Shell-Variable und ist für Skripte oder Subprozesse nicht sichtbar. - Verwende
export -p, um exportierte Variablen anzuzeigen,export -n, um eine Variable aus der Exportliste zu entfernen, ohne sie zu löschen, undexport -f, um Shell-Funktionen zu exportieren. - Variablen, die in einem Terminal exportiert werden, verschwinden beim Schließen der Sitzung. Um sie dauerhaft zu speichern, fügst du die entsprechende Anweisung in
~/.bashrc,~/.bash_profileoder/etc/environmentein. - Wenn du
PATHänderst, solltest du ein Verzeichnis mitexport PATH="$PATH:/new/directory"ergänzen, anstatt den vorhandenen Wert zu überschreiben. exportentspricht dem POSIX-Standard und funktioniert in kompatiblen Shells.declare -xist Bash-spezifisch, unterstützt jedoch zusätzliche Attribute. Verwendeenv VAR=value command, wenn eine Variable nur für einen einzelnen Befehl gelten soll.- Weder
sudonochcronübernehmen normalerweise die vollständige Umgebung deiner interaktiven Shell. Variablen müssen explizit übergeben oder in der jeweils passenden Konfiguration definiert werden.
Was ist der Befehl ›export‹ unter Linux?
Der Befehl export ist ein POSIX-konformer, integrierter Shell-Befehl, der von kompatiblen Shells wie Bash, sh und dash unterstützt wird. Andere Shells, darunter Zsh, implementieren ihn ebenfalls aus Kompatibilitätsgründen. Sein Hauptzweck besteht darin, eine Shell-Variable als Umgebungsvariable zu markieren, sodass untergeordnete Prozesse sie erben.
Um zu verstehen, warum dies wichtig ist, muss zwischen Shell-Variablen und Umgebungsvariablen unterschieden werden.
Shell-Variablen und Umgebungsvariablen
Wenn du ein Terminal öffnest und eine Variable wie folgt erstellst:
GREETING=“Hello, world“
erstellst du eine Shell-Variable. Sie existiert nur innerhalb der aktuellen Shell-Sitzung. Die Variable ist nicht automatisch in einem neuen Terminal-Tab, einem Skript oder einem Subprozess verfügbar.
Eine Umgebungsvariable ist Bestandteil der Prozessumgebung. Diese Umgebung besteht aus Schlüssel-Wert-Paaren, die einem Prozess beim Start übergeben werden. Wenn die Shell einen untergeordneten Prozess startet, erhält dieser eine Kopie der Shell-Umgebung. Häufig verwendete Umgebungsvariablen sind PATH, HOME und USER.
Hinweis: Bei Zuweisungen von Shell-Variablen dürfen sich keine Leerzeichen um das Gleichheitszeichen befinden.
MY_VAR=value # Correct
MY_VAR = value # Incorrect
Der Befehl export verbindet diese beiden Variablentypen. Er fügt eine Shell-Variable zur Prozessumgebung hinzu, sodass untergeordnete Prozesse, die von der aktuellen Shell gestartet werden, sie erhalten.
Wie ›export‹ Variablen für untergeordnete Prozesse verfügbar macht
Das folgende Beispiel zeigt, warum export erforderlich ist. Erstelle zunächst eine Variable und starte anschließend einen weiteren Bash-Prozess, der versucht, sie auszugeben:
Without export
MY_VAR=“example-value“
bash -c ‚echo $MY_VAR‘
Der Befehl gibt nichts aus, da MY_VAR nicht zur Umgebung hinzugefügt wurde. Vergleiche dies mit der exportierten Variante:
With export
export MY_VAR=“example-value“
bash -c ‚echo $MY_VAR‘
Ausgabe:
example-value
Der untergeordnete Bash-Prozess kann auf die Variable zugreifen, weil er sie als Bestandteil seiner geerbten Umgebung erhalten hat.
Die Vererbung von Umgebungsvariablen funktioniert nur in eine Richtung. Ein untergeordneter Prozess erhält eine Kopie der Umgebung des übergeordneten Prozesses. Änderungen, die im untergeordneten Prozess vorgenommen werden, werden jedoch nicht an den übergeordneten Prozess zurückgegeben. Wenn ein Skript MY_VAR ändert, bleibt der Wert in der aktuellen Shell unverändert.
Grundlegende Syntax des Befehls ›export‹
Die allgemeine Syntax lautet:
export [options] [NAME[=VALUE] ...]
Du kannst eine vorhandene Variable exportieren oder eine Variable mit einem einzigen Befehl erstellen und exportieren.
Bestandteile der ›export‹-Syntax
| Bestandteil | Beschreibung |
|---|---|
export |
Der integrierte Shell-Befehl. |
NAME |
Der Name der zu exportierenden Variable oder Funktion. |
=VALUE |
Ein optionaler Wert, der beim Exportieren zugewiesen wird. |
options |
Optionen, die das Verhalten des Befehls ändern, darunter -p, -n und -f. |
Optionen des Befehls ›export‹
Der Befehl export unterstützt drei zentrale Optionen:
-p: Zeigt alle Variablen und Funktionen an, die derzeit für den Export markiert sind. Die Ausgabe verwendet wiederverwendbare Shell-Syntax.-n: Entfernt eine Variable aus der Exportliste, behält sie jedoch in der aktuellen Shell bei.-f: Exportiert eine Shell-Funktion anstelle einer Variable.
›export‹ unter Linux verwenden: Praktische Beispiele
Die folgenden Beispiele zeigen, wie export in typischen Situationen eingesetzt wird.
Beispiel 1: Eine neue Variable erstellen und exportieren
Die einfachste Methode besteht darin, eine Variable mit einem einzigen Befehl zu erstellen und zu exportieren. Dadurch wird die Variable in der aktuellen Shell definiert und unmittelbar für untergeordnete Prozesse verfügbar gemacht.
export PROJECT=“my-app“
Verwende printenv, um zu prüfen, ob die Variable exportiert wurde:
printenv PROJECT
Ausgabe:
my-app
Beispiel 2: Eine vorhandene Shell-Variable exportieren
Eine vorhandene Shell-Variable kann separat exportiert werden, ohne ihren Wert zu ändern. Dieser Ansatz ist hilfreich, wenn eine Variable zunächst bedingt gesetzt und erst später anderen Prozessen zur Verfügung gestellt wird.
Define the variable as a shell variable
DB_HOST=“localhost“
Export it so child processes can access it
export DB_HOST
Alle Skripte oder Subprozesse, die anschließend aus dieser Shell gestartet werden, können nun auf DB_HOST zugreifen.
Beispiel 3: Eine Variable exportieren und gleichzeitig einen Wert zuweisen
Das Erstellen und Exportieren einer Variable kann in einer Zeile kombiniert werden. Dieses Muster wird häufig in Shell-Skripten und Konfigurationsdateien wie .bashrc verwendet.
export APP_ENV=“production“
Gib den Wert aus, um die Zuweisung zu überprüfen:
echo $APP_ENV
Ausgabe:
production
Beispiel 4: Exportierte Variablen mit ›export -p‹ anzeigen
Der Befehl export -p listet die Variablen auf, die derzeit für den Export markiert sind. In Bash können auch exportierte Funktionen enthalten sein. Da die Ausgabe gültige Shell-Syntax verwendet, kann sie in eine Datei umgeleitet und später mit source geladen werden, um die Umgebung wiederherzustellen.
export -p
Eine gekürzte Ausgabe kann beispielsweise folgendermaßen aussehen:
Ausgabe:
declare -x HOME=“/home/user“
declare -x LANG=“en_US.UTF-8″
declare -x LOGNAME=“user“
declare -x PATH=“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin“
declare -x PWD=“/home/user“
declare -x USER=“user“
Jeder Eintrag beginnt mit declare -x. Dies ist die Bash-Schreibweise für eine Variable mit gesetztem Exportattribut.
Beispiel 5: Eine Variable mit ›export -n‹ aus der Exportliste entfernen
Die Option -n entfernt das Exportattribut einer Variable. Die Variable bleibt in der aktuellen Shell verfügbar, wird von neu gestarteten untergeordneten Prozessen jedoch nicht mehr geerbt.
export APP_ENV=“production“
Confirm that the variable is exported
printenv APP_ENV
Ausgabe:
production
Entferne die Variable aus der Exportliste:
export -n APP_ENV
The variable remains available in the current shell
echo $APP_ENV
Ausgabe:
production
Ein untergeordneter Prozess kann anschließend nicht mehr auf die Variable zugreifen:
bash -c ‚echo $APP_ENV‘
Der Befehl erzeugt keine Ausgabe. Dadurch wird deutlich, dass die Variable nicht mehr Bestandteil der an untergeordnete Prozesse übergebenen Umgebung ist.
Beispiel 6: Eine Shell-Funktion mit ›export -f‹ exportieren
Shell-Funktionen sind normalerweise auf die Shell beschränkt, in der sie definiert wurden. Ein gewöhnlicher Variablenexport macht eine Funktion nicht für untergeordnete Prozesse verfügbar. Bash-Funktionen müssen ausdrücklich mit der Option -f exportiert werden.
Definiere zunächst eine Funktion:
greet() {
echo „Hello from the function!“
}
Führe die Funktion in der aktuellen Shell aus:
greet
Ausgabe:
Hello from the function!
Exportiere die Funktion mit -f:
export -f greet
Starte einen untergeordneten Bash-Prozess und rufe die Funktion auf:
bash -c ‚greet‘
Ausgabe:
Hello from the function!
Ohne export -f würde die untergeordnete Shell den Fehler bash: greet: command not found ausgeben. Das Exportieren von Funktionen kann in Skripten hilfreich sein, die Subshells erzeugen und gemeinsam verwendete Hilfsfunktionen benötigen.
Hinweis: Exportierte Funktionen sind eine Bash-spezifische Funktion und nicht zwischen verschiedenen Shells portabel. Vermeide den Export von Funktionen, wenn er nicht erforderlich ist, insbesondere in sicherheitskritischen Umgebungen.
Beispiel 7: Die Variable ›PATH‹ ändern und exportieren
PATH gehört zu den Umgebungsvariablen, die am häufigsten mit export geändert werden. Sie definiert die Verzeichnisse, in denen die Shell nach einem eingegebenen Befehl sucht. Wenn du ein benutzerdefiniertes Verzeichnis hinzufügst, können Skripte und ausführbare Dateien darin ohne vollständige Pfadangabe ausgeführt werden.
Die sichere Methode besteht darin, das neue Verzeichnis an den aktuellen Wert anzuhängen. Der bestehende Wert wird über $PATH referenziert:
export PATH=“$PATH:/opt/myapp/bin“
Zeige den aktualisierten Wert an:
echo $PATH
Ausgabe:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/myapp/bin
Das zusätzliche Verzeichnis befindet sich am Ende der Suchreihenfolge. Soll die Shell dieses Verzeichnis vor den bereits vorhandenen Pfaden durchsuchen, stellst du es an den Anfang:
export PATH=“/opt/myapp/bin:$PATH“
Weitere Informationen zur Verwaltung dieser Variable findest du in einer Anleitung zum Anzeigen und Aktualisieren der Linux-Umgebungsvariable PATH.
Exportierte Variablen zwischen Sitzungen beibehalten
Eine über die Kommandozeile exportierte Variable gilt nur für die aktuelle Shell-Sitzung. Beim Schließen des Terminals wird sie entfernt. Damit die Variable in zukünftigen Sitzungen verfügbar bleibt, musst du die entsprechende Konfiguration einer Datei hinzufügen, die von der Shell automatisch geladen wird.
›export‹-Anweisungen zu ›~/.bashrc‹ hinzufügen
Die Datei ~/.bashrc konfiguriert interaktive Bash-Shells, die keine Login-Shells sind. In vielen Umgebungen wird sie bei jedem Öffnen eines neuen Terminalfensters oder Tabs geladen. Sie eignet sich daher für Variablen, die bei der täglichen interaktiven Arbeit benötigt werden.
Öffne die Datei in einem Texteditor:
nano ~/.bashrc
Füge die export-Anweisung am Ende ein:
export MY_API_KEY=“your-key-here“
Lade die Datei nach dem Speichern neu, damit die Einstellung ohne ein neues Terminal auf die aktuelle Shell angewendet wird:
source ~/.bashrc
Neue Terminal-Sitzungen definieren und exportieren MY_API_KEY nun automatisch.
›~/.bash_profile‹ für Login-Shells verwenden
Die Datei ~/.bash_profile oder auf einigen Systemen ~/.profile wird für Login-Shells geladen. Dazu gehören unter anderem Sitzungen, die beim Anmelden an einem entfernten System über SSH entstehen.
Auf vielen Desktop-Systemen genügt ~/.bashrc für die meisten interaktiven Anwendungsfälle. Variablen, die bei Remote-Logins erforderlich sind, können stattdessen über ~/.bash_profile konfiguriert werden.
Eine häufig verwendete Konfiguration sorgt dafür, dass ~/.bash_profile die Datei ~/.bashrc lädt. Dadurch können Login- und interaktive Shells dieselben Einstellungen verwenden.
~/.bash_profile:
Add this to the end of ›~/.bash_profile‹
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
Die export-Anweisungen können anschließend in ~/.bashrc verbleiben und werden in beiden Situationen geladen.
Systemweite Variablen über ›/etc/environment‹ konfigurieren
Verwende /etc/environment, wenn eine Variable für alle Nutzer statt nur für ein einzelnes Benutzerkonto verfügbar sein soll. Diese Datei ist kein Shell-Skript. Sie akzeptiert einfache Einträge im Format KEY="value" und verwendet nicht das Schlüsselwort export.
Öffne die Datei mit administrativen Berechtigungen:
sudo nano /etc/environment
Füge die erforderliche Variable hinzu.
/etc/environment:
JAVA_HOME=“/usr/lib/jvm/java-17-openjdk-amd64″
Die Einstellung wird normalerweise nach der nächsten Anmeldung verfügbar. Da die Datei keine Shell-Syntax verwendet, kann sie shellübergreifend und mit unterschiedlichen Display-Managern eingesetzt werden.
Allerdings liest nicht jedes Programm /etc/environment. Dienste, die beispielsweise von systemd verwaltet werden, können eine eigene Umgebungskonfiguration benötigen.
›export‹ im Vergleich mit verwandten Befehlen
Mehrere Shell-Befehle bieten Funktionen, die mit export verwandt sind. Wenn du die Unterschiede kennst, kannst du den passenden Befehl auswählen und Fehler in Skripten vermeiden.
›export‹ und ›declare -x‹
In Bash weisen sowohl declare -x VARIABLE als auch export VARIABLE einer Variable das Exportattribut zu. Die wichtigsten Unterschiede betreffen die Portabilität und zusätzliche Funktionen.
| Merkmal | export |
declare -x |
|---|---|---|
| POSIX-konform | Ja | Nein, Bash-spezifisch |
Funktioniert in sh und dash |
Ja | Nein |
| Unterstützt zusätzliche Attribute | Nein | Ja, darunter -i für Integer und -r für schreibgeschützte Variablen |
Verwende export in Skripten, die mit verschiedenen Shells oder minimalen Umgebungen funktionieren sollen, in denen sh oder dash der Standard sein können.
Verwende declare -x in Bash-spezifischen Skripten, wenn zusätzliche Variablenattribute erforderlich sind.
›export‹ und ›env‹
Der Befehl env erfüllt einen anderen Zweck. Während export die Umgebung der aktuellen Shell für die Dauer der Sitzung verändert, startet env einen einzelnen Befehl mit einer temporären Umgebung und lässt die aktuelle Shell unverändert.
export changes the environment of the current shell for the session
export NODE_ENV=“production“
node app.js
env applies the variable only to this command
env NODE_ENV=“production“ node app.js
Der Ansatz mit env eignet sich für einmalige Befehle, bei denen die aktuelle Shell-Umgebung unverändert bleiben soll. Er wird außerdem häufig in Interpreter-Deklarationen eingesetzt, damit ein Skript den benötigten Interpreter über PATH findet:
#!/usr/bin/env python3
›export‹ und ›printenv‹
printenv ist ein schreibgeschütztes Hilfsprogramm zum Anzeigen von Umgebungsvariablen. Es definiert oder exportiert keine Variablen.
In diesem Vergleich verändert export die Umgebung, während printenv sie lediglich ausliest.
Display one environment variable
printenv HOME
Ausgabe:
/home/user
Display all environment variables
printenv
export -p und printenv zeigen häufig ähnliche Informationen an, sind jedoch nicht identisch.
export -p zeigt Variablen, die von der aktuellen Shell für den Export markiert wurden. printenv zeigt die vollständige Prozessumgebung, einschließlich Variablen, die möglicherweise bereits vor dem Start der Shell über Mechanismen wie /etc/environment oder PAM definiert wurden.
›export‹ und ›set‹
Ohne Argumente zeigt set Shell-Variablen, Umgebungsvariablen und Shell-Funktionen an. Damit liefert der Befehl eine umfassendere Ansicht als export -p.
Der Befehl exportiert selbst keine Werte, seine Optionen können jedoch das Verhalten der Shell verändern.
Verwende set, um alle in der aktuellen Shell definierten Werte zu untersuchen. Verwende export -p, um ausschließlich die Werte anzuzeigen, die untergeordnete Prozesse erben.
›export‹ in Bash-Skripten verwenden
Shell-Skripte müssen Umgebungsvariablen häufig mit anderen Skripten oder Programmen teilen. Der Befehl export steuert, welche Variablen von diesen untergeordneten Prozessen geerbt werden.
Variablen an untergeordnete Skripte weitergeben
Wenn ein Bash-Skript ein anderes Skript startet, erhält das untergeordnete Skript nur die Variablen, die vom übergeordneten Skript exportiert wurden. Variablen, die lokal in der übergeordneten Shell bleiben, werden nicht weitergegeben.
Das folgende übergeordnete Skript definiert zwei Variablen und startet anschließend ein weiteres Skript.
parent.sh:
#!/bin/bash
DB_NAME=“mydb“
export DB_USER=“admin“
bash child.sh
Das untergeordnete Skript gibt beide Variablenwerte aus.
child.sh:
#!/bin/bash
echo „DB_NAME: $DB_NAME“ # Empty because it was not exported
echo „DB_USER: $DB_USER“ # Displays „admin“
Beim Ausführen von parent.sh entsteht folgende Ausgabe:
Ausgabe:
DB_NAME:
DB_USER: admin
Nur DB_USER wurde exportiert und ist daher im untergeordneten Skript verfügbar.
Häufige ›export‹-Muster in Skripten
Deployment- und Konfigurationsskripte laden häufig mehrere Variablen aus einer .env-Datei und exportieren sie automatisch:
#!/bin/bash
Load variables from a file and automatically export them
set -a # Automatically export assigned variables
source .env # Load KEY=VALUE assignments from the file
set +a # Disable automatic export
Die Option set -a sorgt dafür, dass Bash alle nachfolgenden Variablenzuweisungen automatisch für den Export markiert. Dadurch kann eine .env-Datei geladen werden, ohne für jede Variable einen eigenen export-Befehl schreiben zu müssen.
Die Datei muss gültige Shell-Zuweisungssyntax enthalten.
Weitere Shell-Scripting-Techniken findest du in einer Einführung in das Linux-Terminal.
Häufige Probleme mit ›export‹ beheben
Die folgenden Abschnitte beschreiben typische Probleme mit exportierten Variablen und zeigen, wie sie erkannt und behoben werden können.
Variable ist in einem untergeordneten Prozess nicht verfügbar
Wenn ein Skript nicht auf eine im Terminal erstellte Variable zugreifen kann, wurde die Variable wahrscheinlich nicht exportiert. Sie war daher nicht Bestandteil der an das Skript übergebenen Umgebung.
Prüfe, ob die Variable exportiert ist:
export -p | grep DB_HOST
Falls kein passender Eintrag erscheint, exportiere die Variable:
export DB_HOST
Danach gestartete untergeordnete Prozesse können auf die Variable zugreifen.
Variable verschwindet nach dem Schließen des Terminals
Eine interaktiv definierte und exportierte Variable bleibt nur während der aktuellen Terminal-Sitzung verfügbar. Beim Schließen des Terminals wird sie entfernt.
Damit die Variable in zukünftigen Sitzungen automatisch definiert wird, fügst du die export-Anweisung für interaktive Shells zu ~/.bashrc oder für Login-Shells zu ~/.bash_profile hinzu.
Lade die geänderte Konfiguration anschließend sofort neu:
source ~/.bashrc
Variable wird nicht an ›sudo‹ oder ›cron‹ übergeben
Variablen aus einer interaktiven Shell sind möglicherweise nicht für Befehle verfügbar, die mit sudo gestartet oder über cron geplant werden. Beide arbeiten typischerweise mit einer eingeschränkten Umgebung.
Übergib eine Variable mithilfe von env an einen mit sudo ausgeführten Befehl:
sudo env MY_VAR=“$MY_VAR“ some-command
Verwende die Option -E, um die Beibehaltung der aktuellen exportierten Umgebung anzufordern:
sudo -E some-command
Hinweis: Verwende sudo -E mit Vorsicht, da dadurch sensible Variablen und veränderte Suchpfade übernommen werden können.
Für Cronjobs definierst du die erforderlichen Variablen direkt in der Crontab. Öffne sie mit crontab -e und füge die Zuweisungen vor den geplanten Befehlen ein:
MY_VAR=myvalue
0 2 * * * /path/to/script.sh
Weitere Informationen findest du in einer allgemeinen Anleitung zur Automatisierung von Aufgaben mit cron unter Linux.
Befehle funktionieren nach einer Änderung von ›PATH‹ nicht mehr
Wenn du export PATH="/opt/myapp/bin" ausführst, ohne den aktuellen Wert von $PATH zu übernehmen, ersetzt du den vollständigen Suchpfad durch ein einzelnes Verzeichnis.
Die Shell kann dadurch Standardbefehle wie ls, cp oder nano möglicherweise nicht mehr finden und meldet command not found.
Füge das Verzeichnis an den vorhandenen Wert an oder stelle es voran, statt diesen zu ersetzen.
Verzeichnis am Ende ergänzen:
export PATH=“$PATH:/opt/myapp/bin“
Verzeichnis am Anfang ergänzen:
export PATH=“/opt/myapp/bin:$PATH“
Wenn die aktuelle Sitzung bereits einen unbrauchbaren PATH enthält, kannst du für diese Sitzung einen typischen Standardwert wiederherstellen:
export PATH=“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin“
Korrigiere anschließend den dauerhaften Eintrag in ~/.bashrc, damit das Problem in zukünftigen Terminal-Sitzungen nicht erneut auftritt.
›command‹ not found oder Zuweisungsfehler bei ›export‹
Die Shell-Syntax für Variablenzuweisungen erlaubt keine Leerzeichen um das Gleichheitszeichen. Leerzeichen führen dazu, dass die Shell den Ausdruck als mehrere Argumente oder Befehle interpretiert. Dadurch können Syntaxfehler oder command not found-Meldungen entstehen.
Diese Syntax ist falsch:
export MY_VAR = „production“
Verwende die Zuweisung ohne Leerzeichen:
export MY_VAR=“production“
Dieselbe Regel gilt, wenn die Variable zuerst erstellt und anschließend exportiert wird:
MY_VAR=“production“
export MY_VAR
Werte mit Leerzeichen müssen in Anführungszeichen gesetzt werden, damit die Shell den gesamten Wert als eine Zuweisung behandelt:
export GREETING=“Hello, world“
Wenn ein Skript trotz Export nicht auf eine Variable zugreifen kann, solltest du außerdem die Schreibweise des Variablennamens überprüfen.
Wenn beispielsweise MY_VAR exportiert wird, die zugewiesene Variable jedoch MY_VARIABLE heißt, wird ein anderer Name exportiert und die gewünschte Variable bleibt nicht verfügbar.
FAQs
Was ist der Unterschied zwischen einer Shell-Variable und einer Umgebungsvariable unter Linux?
Eine Shell-Variable existiert ausschließlich innerhalb der aktuellen Shell-Sitzung. Sie ist lokal auf diese Shell beschränkt und wird nicht automatisch für daraus gestartete Skripte oder untergeordnete Prozesse verfügbar gemacht.
Eine Umgebungsvariable gehört zur Prozessumgebung und wird von untergeordneten Prozessen geerbt.
Verwende den Befehl export, um eine Shell-Variable in eine Umgebungsvariable umzuwandeln. Dieser Schritt ist notwendig, wenn Skripte oder Befehle, die aus dem aktuellen Terminal gestartet werden, den Wert lesen müssen.
Macht der Befehl ›export‹ eine Variable dauerhaft?
Nein. Der Befehl export allein speichert eine Variable nicht dauerhaft.
Ein Befehl wie export MY_VAR="value" gilt nur für die aktuelle Shell-Sitzung. Die Variable und ihr Exportstatus verschwinden, sobald diese Sitzung beendet wird.
Damit die Variable in zukünftigen Sitzungen erneut erstellt wird, fügst du die export-Anweisung einer Konfigurationsdatei hinzu, beispielsweise ~/.bashrc für interaktive Shells ohne Login oder ~/.bash_profile für Login-Shells.
Für eine systemweite Variable fügst du eine kompatible Zuweisung in /etc/environment ein. Die Variable wird dann beim Start der entsprechenden Sitzung definiert.
Wie kann ich alle derzeit exportierten Variablen anzeigen?
Führe export -p aus, um alle Variablen aufzulisten, die von der aktuellen Shell für den Export markiert wurden.
Bash zeigt sie in Einträgen wie declare -x VAR="value" an.
Die vollständige Prozessumgebung kann außerdem mit printenv oder env angezeigt werden.
printenv und env enthalten sowohl Variablen, die von der aktuellen Shell definiert wurden, als auch Werte, die bereits vor dem Start der Shell aus übergeordneten Prozessen oder Konfigurationsmechanismen übernommen wurden.
Was bewirkt ›export -n‹?
Der Befehl export -n VARIABLE_NAME entfernt das Exportattribut der angegebenen Variable.
Danach neu erstellte untergeordnete Prozesse erben sie nicht mehr. Die Variable selbst wird jedoch nicht gelöscht und bleibt in der aktuellen Shell verfügbar.
Du kannst die Variable weiterhin lokal auslesen oder verändern. Um sie erneut für untergeordnete Prozesse verfügbar zu machen, exportierst du sie erneut.
Kann eine Shell-Funktion in Bash exportiert werden?
Ja. Bash unterstützt das Exportieren von Funktionen über die Option -f.
Mit export -f function_name wird die Funktion für untergeordnete Bash-Prozesse verfügbar, die von der aktuellen Shell gestartet werden.
Diese Funktion ist Bash-spezifisch und funktioniert nicht in Shells wie sh oder dash. Exportierte Bash-Funktionen werden nur von untergeordneten Bash-Shells übernommen, nicht von anderen Shells oder externen Programmen.
Was ist der Unterschied zwischen ›export‹ und ›declare -x‹?
In Bash markieren sowohl export VAR als auch declare -x VAR eine Variable für den Export.
Der wichtigste Unterschied ist die Portabilität. export ist POSIX-konform und funktioniert in vielen Shells, darunter sh, dash und Zsh. declare -x ist ein Bash-spezifischer Befehl.
declare unterstützt außerdem zusätzliche Attribute. Mit -r kann eine Variable beispielsweise schreibgeschützt und mit -i als Integer markiert werden. Diese Möglichkeiten sind vor allem in Skripten nützlich, die ausdrücklich für Bash geschrieben wurden.
Warum fehlt eine exportierte Variable in einem Cronjob?
Cronjobs übernehmen normalerweise keine Variablen, die in einem interaktiven Terminal exportiert wurden. Cron startet Aufgaben mit einer minimalen Umgebung, die von der Benutzer-Shell getrennt ist.
Definiere die erforderliche Variable direkt in der mit crontab -e geöffneten Crontab oder lass das geplante Skript eine Konfigurationsdatei laden, die die Variablen vor der eigentlichen Ausführung definiert und exportiert.
Wie füge ich mit ›export‹ ein Verzeichnis zu ›PATH‹ hinzu?
Um ein weiteres Verzeichnis hinzuzufügen und gleichzeitig alle vorhandenen Suchpfade beizubehalten, verwendest du:
export PATH=“$PATH:/your/new/directory“
In diesem Befehl steht $PATH für die vorhandene Liste von Verzeichnissen. Der Doppelpunkt trennt die einzelnen Einträge, und /your/new/directory ist das neu hinzugefügte Verzeichnis.
Behalte $PATH immer bei, sofern du nicht absichtlich den gesamten Suchpfad ersetzen möchtest. Lässt du den bestehenden Wert weg, kann die Shell möglicherweise keine Standardbefehle mehr finden.
Damit die Änderung über mehrere Sitzungen hinweg erhalten bleibt, fügst du dieselbe export-Anweisung zu ~/.bashrc oder einer anderen passenden Initialisierungsdatei der Shell hinzu.
Fazit
Der Befehl export ist ein grundlegendes Linux-Shell-Werkzeug zur Verwaltung von Variablen und Prozessumgebungen. Wenn du verstehst, wie und wann du ihn einsetzt, kannst du Variablen mit untergeordneten Prozessen teilen, effizientere Workflows aufbauen und zuverlässige Shell-Skripte sowie automatisierte Aufgaben erstellen.
Exportierte Variablen bleiben nur für die aktuelle Shell-Sitzung aktiv, sofern sie nicht in einer dauerhaften Konfigurationsdatei wie ~/.bashrc, ~/.bash_profile oder /etc/environment definiert werden.
Gehe beim Bearbeiten dauerhafter Konfigurationsdateien und wichtiger Variablen wie PATH besonders sorgfältig vor.


