Angenommen, ich habe dieses Skript
export.bash :
#! /usr/bin/env bash
export VAR="HELLO, VARIABLE"
Wenn ich das Skript ausführe und versuche, auf das zuzugreifen $VAR
, erhalte ich keinen Wert!
echo $VAR
Gibt es eine Möglichkeit, auf die Datei zuzugreifen, $VAR
indem Sie export.bash ausführen, ohne sie zu beziehen ?
bash
shell
unix
environment-variables
Tarrsalah
quelle
quelle
source
odereval
oder ...)man source
funktioniert es nicht, weilsource
es in Bash eingebaut ist. Sie müssen laufenhelp source
Antworten:
Schnelle Antwort: Nein.
Es gibt jedoch mehrere mögliche Problemumgehungen.
Das offensichtlichste, das Sie bereits erwähnt haben, ist die Verwendung
source
oder.
Ausführung des Skripts im Kontext der aufrufenden Shell:Eine andere Möglichkeit besteht darin, dass das Skript anstelle des Festlegens einer Umgebungsvariablen Befehle druckt, mit denen die Umgebungsvariable festgelegt wird:
Ein dritter Ansatz besteht darin, ein Skript zu haben, das Ihre Umgebungsvariablen intern festlegt und dann einen angegebenen Befehl mit dieser Umgebung aufruft:
Dieser letzte Ansatz kann sehr nützlich sein, ist jedoch für die interaktive Verwendung unpraktisch, da Sie nicht die Einstellungen in Ihrer aktuellen Shell erhalten (mit allen anderen Einstellungen und dem Verlauf, die Sie erstellt haben).
quelle
Um die VAR-Variable zuerst zu exportieren, ist es am logischsten und sinnvollsten, die Variable als Quelle zu verwenden:
oder
Jetzt funktioniert es beim Echo von der Haupt-Shell
Wir werden jetzt VAR zurücksetzen
Jetzt führen wir ein Skript aus, um die Variable zu beschaffen, und deaktivieren sie dann:
der Code: cat test-export.sh
Hier ist ein Weg
BITTE BEACHTEN SIE: Die Exporte beschränken sich auf das Skript, das die Exporte in Ihrer Hauptkonsole ausführt. Soweit es sich um einen Cron-Job handelt, würde ich ihn wie die Konsole wie unten hinzufügen ... für den Befehlsteil noch fraglich: So würden Sie vorgehen renn von deiner Shell herein:
An Ihrer Eingabeaufforderung (solange die Datei export.bash mehrere Echowerte enthält)
Katze v1.sh.
Solange dies für Ihre Verwendung bestimmt ist, können Sie die Variablen jederzeit für Ihre Skripte verfügbar machen, indem Sie einen Bash-Alias wie den folgenden ausführen:
füge dies zu deiner .bashrc hinzu
Quelle Ihre bashrc-Datei und Sie können wie oben jederzeit tun ...
Wie auch immer, zurück zum Rest.
Dies hat es global verfügbar gemacht und dann das Skript ausgeführt.
Echo es einfach aus und starte den Export für das Echo!
cat export.bash
Jetzt im Skript oder auf Ihrer Konsole ausführen:
Versuchen:
Mehrere Werte, solange Sie mit der obigen Methode wissen, was Sie in einem anderen Skript erwarten:
cat export.bash
cat test-export.sh
Nun die Ergebnisse
und das letzte endgültige Update für die automatische Zuweisung lesen Sie die VARIABLEN:
Das Skript: cat test-export.sh
quelle
Ausführen
Alle Variablen, die Sie danach aus einer Datei beziehen, werden in Ihre Shell exportiert.
Wenn Sie fertig sind, führen Sie aus. Dadurch wird der Allexport-Modus deaktiviert.
quelle
bash source export
Es wurde eine interessante und übersichtliche Möglichkeit gefunden, Umgebungsvariablen aus einer Datei zu exportieren:
in
env.vars
:Testskript:
quelle
Eine weitere Problemumgehung, die je nach Fall nützlich sein kann: Erstellen einer weiteren Bash, die die exportierte Variable erbt. Es ist ein besonderer Fall von @Keith Thompson Antwort, werden all diese Nachteile.
export.bash:
Jetzt:
quelle
. ./export.bash
bash
als untergeordnetes Element der aktuellen Shell aufgerufen . Und daVAR
zuvor exportiert wurde, enthält dieser Aufruf die Variable. Wenn Sie tippen, wirdexit
das natürlichVAR
ausgehen. Hast du kontrolliert?Die Antwort ist nein, aber für mich habe ich folgendes getan
das Skript: myExport
ein Alias in meinem .bashrc
Sie beziehen es immer noch, aber vielleicht ist es auf diese Weise benutzerfreundlicher und für jemand anderen interessant.
quelle
Vielleicht können Sie eine Funktion in ~ / .zshrc, ~ / .bashrc schreiben.
Da die Variable außerhalb verwendet wird, können Sie das Schreiben von Skriptdateien vermeiden.
quelle