Die exportierte Variable blieb nach der Skriptausführung nicht erhalten


8

Ich stehe vor einem seltsamen Problem. Ich habe eine VM mit Solaris 11 und versuche, einige Bash-Skripte zu schreiben.

Wenn ich auf der Shell Folgendes eingebe:

export TEST=aaa

und anschließend ausführen:

set

Ich sehe korrekt eine neue Umgebungsvariable namens TEST, deren Wert aaa ist. Wenn ich jedoch im Grunde das Gleiche in einem Skript mache. Wenn das Skript beendet wird, wird der Variablensatz nicht angezeigt. Um ein konkretes Beispiel zu geben, wenn ich in einer Datei test.sh habe:

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
echo 2: $USER
TEST=sss
echo 3:  $TEST
export TEST
echo 4:  $TEST

es druckt:

1:
2: daniele
3: sss
4: sss

und nach seiner Ausführung wird TEST nicht in der Shell festgelegt. Vermisse ich etwas Ich habe versucht, sowohl TEST = sss als auch die separate Variable set / export ohne Unterschied zu exportieren.

Antworten:


15

export - Variable für untergeordnete Prozesse verfügbar machen, jedoch nicht für übergeordnete Prozesse.

Quellenskript in der Shell ausführen, ohne einen untergeordneten Prozess zu erstellen

Für exalmpe kann eine persistente Variable durch Schreiben in eine Datei realisiert werden

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
CONFIGFILE=~/test-persistent.vars
if [ -r ${CONFIGFILE} ]; then
  # Read the configfile if it's existing and readable
  source ${CONFIGFILE}
fi
echo 2: $TEST
echo 3: $USER
TEST=sss
echo 4:  $TEST
echo TEST="$TEST"> ${CONFIGFILE}
echo 5:  $TEST

Dies ist auch nicht genau das, was ich erreichen wollte, aber ich habe Ihren Standpunkt verstanden. Vielen Dank.
Daniele

5

Um Ihre Variablen sichtbar zu machen, benötigen Sie sourcedas Skript, das Ihre Variablen exportiert. Siehe man source.


1
Wahrscheinlich gibt es keine Quell-Manpage, und Sie möchten help sourcestattdessen in Bash.
Eintopf

Dies funktioniert, wenn ich das Skript direkt aufrufe (dh wenn ich das Skript mit dem Export aus der Shell beziehe), aber es scheint nicht zu funktionieren, wenn ich das Skript aus einem anderen Skript heraus beziehe.
Daniele
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.