ubuntuusers.de

variablen in zweites script vererben (bash)

Status: Gelöst | Ubuntu-Version: Kubuntu 10.10 (Maverick Meerkat)
Antworten |

Tids Team-Icon

Avatar von Tids

Anmeldungsdatum:
29. Oktober 2008

Beiträge: 3065

Wohnort: Naumburg (Saale)

Heyho ☺ ich hab ein script1, welches ein script2 im xterm als kleines Beispiel:

#! /bin/bash
TEST=33
xterm -e "/home/fabi/script2.sh"
#! /bin/bash
echo "${TEST}"
read

Nun würde ich gerne die Variable TEST aus dem ersten Script mit in das zweite übernehmen, da die echten scripts größtenteils die gleichen Variablen benutzen und ich sie so nicht noch einmal zuweisen müsste, was alles in allem kleiner macht. Nur wie stelle ich das an? Kann man Variablen vererben in der bash? Mein erster Gedanke ist "export". So setzt man doch Systemvariablen (oder?). Nun frage ich mich aber, verschwinden diese nach ablauf des scriptes oder geistern diese mir weiter im Speicher herum?

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Umgebungsvariablen verschwinden nach dem Ablauf des Scripts.

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

Um eine Umgebungsvariable an einen Kindprozess zu vererben, musst du sie exportieren:

TEST=33
export TEST

oder gleich

export TEST=33

tvn

Avatar von tvn

Anmeldungsdatum:
30. November 2010

Beiträge: 51

Wie Hello World beschreibt sind die Variablen nach Ablauf des Skriptes weg.

Mit export kannst du aber die Variablen an die Kind-Programme weiterleiten. Deine Aufteilung funktioniert also vom Prinzip, wenn du folgendes daraus machst:

1
2
3
#! /bin/bash
export TEST=33
./script2.sh
1
2
3
#! /bin/bash
echo "${TEST}"
read

Wenn du das script1 in der Shell ausführst kannst du ja nach Ablauf mal mit einem

echo $TEST

dir ansehen, dass TEST auch wirklich nicht mehr im Speicher ist. Der Grund ist folgender: Ein Skript erzeugt eine eigene Bash-Instanz (mir fällt die korrekte Bezeichnung hierfür nicht mehr ein) und nach dem beenden fallen alle Variablen die nicht fest irgendwo gespeichert sind weg. Wenn du ein Skript innerhalb der aktuellen Shell ausführen willst musst du source verwenden. Also nach dem folgenden Befehl

1
source skript1

oder

1
. skript

sind die Variablen auch in der Shell in der du gerade regulär arbeitest.

Noch ein Tipp: Ich würde ein Skript nicht mit einem Terminal aufrufen. Setze für die Skripte ein

chmod u+x script.sh

damit du sie direkt aufrufen kannst.

Tids Team-Icon

(Themenstarter)
Avatar von Tids

Anmeldungsdatum:
29. Oktober 2008

Beiträge: 3065

Wohnort: Naumburg (Saale)

ok danke hierfür ☺ Muss ich beim export auf etwas bestimmtes achtes (mal abgesehen davon, dass ich keine Systemvariable 'überschreiben' sollte)?

tvn

Avatar von tvn

Anmeldungsdatum:
30. November 2010

Beiträge: 51

Wenn ich mich nicht irre, kannst du jede Variable überschreiben und manipulieren wie du lustig bist. Nach Ablauf des Skriptes ist für dich alles wieder beim alten. Damit kannst du z.B. auch skripte (ich kann mich nicht entscheiden ob ich es mit k oder mit c schreiben soll, sorry deswegen) schreiben die Programme auf anderen Displays ausführen.

Mir sind zu export keine Nebenwirkungen bekannt.

MfG TvN

Tids Team-Icon

(Themenstarter)
Avatar von Tids

Anmeldungsdatum:
29. Oktober 2008

Beiträge: 3065

Wohnort: Naumburg (Saale)

Gut, dann bedanke ich mich hier noch einmal: "Danke" und dann sind meine Bedenken nun auch vom Tisch 😀

Antworten |