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.sh
und 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 export
Festlegen einer Umgebungsvariablen können Sie entweder eine vorhandene Variable verwenden:
A=10
# ...
export A
Dies sollte in beide arbeiten bash
und sh
. bash
ermö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 $SHELL
zu ü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.sh
direkt 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 ( sh
oder 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).