Wie importiere ich eine Variable aus einem anderen Skript?


8

Ich möchte eine Variable aus einem anderen Skript abrufen, wie in dieser Frage zum Stapelüberlauf gezeigt:

So verweisen Sie auf eine Datei für Variablen in einem Bash-Skript

Die Antwort verwendet jedoch den sourceBefehl, der nur in verfügbar ist bash. Ich möchte dies auf tragbare Weise tun.

Ich habe es auch versucht

Asche

export VAR="foo"
echo "executing a"

b.sh.

#!/bin/sh
./a.sh
echo $VAR

Aber das funktioniert natürlich auch nicht. Wie macht man das?

Antworten:


15

Beachten Sie zunächst, dass varund VARverschiedene Variablen sind.

Um Ihre Frage zu beantworten, ist der .Befehl nicht bash-spezifisch:

# a.sh
num=42
# b.sh
. ./a.sh
echo $num

Die Variablen in "a" müssen nicht exportiert werden.

http://www.gnu.org/software/bash/manual/bashref.html#Bourne-Shell-Builtins


Danke und entschuldige meinen Tippfehler. Ich war ziemlich überrascht über den Unterschied zwischen ./a.shund . ./a.sh. Möchtest du den Unterschied erklären?
Eero Aaltonen

2
Der Befehl dot ( .oder source) wertet das Skript in Ihrer aktuellen Shell aus. Wenn Sie das Skript zuerst ausführen, wird eine Unterschale erzeugt, und alle Umgebungsänderungen in der Unterschale gehen verloren, wenn die Unterschale beendet wird. Ein untergeordneter Prozess kann die Umgebung seiner übergeordneten Datei nicht ändern.
Glenn Jackman

Bash hat eine praktische integrierte helpFunktion, um auf das Handbuch für einen bestimmten Befehl zuzugreifen - siehehelp .
Glenn Jackman

0

Umgebungsvariablen werden nur von Eltern zu Kindern vererbt und nicht umgekehrt. In Ihrem Beispiel ruft b.sh a.sh auf, sodass a als untergeordnetes Element von b ausgeführt wird. Wenn a.sh var exportiert, wird es von b.sh nicht gesehen. Ändern Sie die Logik so, dass der übergeordnete Prozess die Variable exportiert, z

Asche:

echo In a.sh...
VAR="test"
export VAR
./b.sh

b.sh:

echo In b.sh...
echo $VAR

Vielen Dank, aber ich habe tatsächlich sharedDefs.shzwei separate Ziele, die davon abhängen. Daher muss ich die Abhängigkeiten auf diese Weise haben.
Eero Aaltonen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.