Sie haben grundsätzlich zwei Möglichkeiten:
- Machen Sie die Variable zu einer Umgebungsvariablen (
export TESTVARIABLE), bevor Sie das 2. Skript ausführen.
- Quelle das 2. Skript, dh
. test2.shund es wird in der gleichen Shell ausgeführt. Auf diese Weise können Sie komplexere Variablen wie Arrays problemlos gemeinsam nutzen, das andere Skript kann jedoch auch Variablen in der Quellshell ändern.
AKTUALISIEREN:
Zum exportFestlegen einer Umgebungsvariablen können Sie entweder eine vorhandene Variable verwenden:
A=10
# ...
export A
Dies sollte in beide arbeiten bashund sh. bashermöglicht auch die Kombination wie folgt:
export A=10
Dies funktioniert auch in meinem sh (was zufällig ist bash, können Sie verwenden, um echo $SHELLzu überprüfen). Aber ich glaube nicht, dass das garantiert in allen funktioniert sh, also gehen Sie am besten auf Nummer sicher und trennen Sie sie.
Jede Variable, die Sie auf diese Weise exportieren, wird in von Ihnen ausgeführten Skripten angezeigt, zum Beispiel:
Asche:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Dann:
$ ./a.sh
The message is: hello
Die Tatsache, dass dies beide Shell-Skripte sind, ist ebenfalls nur ein Zufall. Umgebungsvariablen können an jeden von Ihnen ausgeführten Prozess übergeben werden. Wenn wir stattdessen Python verwenden, sieht dies möglicherweise folgendermaßen aus:
Asche:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
Beschaffung:
Stattdessen könnten wir so beschaffen:
Asche:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Dann:
$ ./a.sh
The message is: hello
Dies "importiert" mehr oder weniger den Inhalt von b.shdirekt und führt ihn in derselben Shell aus . Beachten Sie, dass wir die Variable nicht exportieren mussten, um darauf zuzugreifen. Dies teilt implizit alle Variablen, die Sie haben, und ermöglicht es dem anderen Skript, Variablen in der Shell hinzuzufügen / zu löschen / zu ändern. Natürlich sollten in diesem Modell beide Skripte dieselbe Sprache ( shoder bash) haben. Um ein Beispiel zu geben, wie wir Nachrichten hin und her weitergeben können:
Asche:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
Dann:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
Dies funktioniert genauso gut in bash. Es macht es auch einfach, komplexere Daten wie Arrays oder assoziative Arrays zu teilen, die Sie nicht als Umgebungsvariable ausdrücken können (zumindest ohne Ihr schweres Heben).