Shellskripts

Intel_Xeon

Ensign
Registriert
Mai 2009
Beiträge
167
Hallo Leute,

ich brauche ein Shellskript das eine Variable die ich zuerst in der bash festlege ausgibt und dann mit hilfe des export befehls ueberschreibe.

Bisher habe ich:
Code:
#!/bin/bash
#
echo $vari
export vari=""
echo $vari

ich habe nun herausgefunden dass wenn ich
Code:
vari="1234"
export vari
mache dann kann er den Wert der Variablen im Shell aufrufen nur sollte ich ihn vom shell aus jetzt wieder löschen können wie geht das?

Weiß jemand von euch warum das nicht funktioniert?
Ich hoffe Ihr könnt mir helfen.

Beste Grüße
Intel_Xeon
 
Zuletzt bearbeitet:
Ein Programm (auch ein ausgeführtes Shellskript ist eins) kann keine Umgebungvariablen des Elternprozesses verändern. Was auch immer du an Variablen in dem Shellskript (=Kindprozess) verbiegst - die aufrufende Shell (=Elternprozess) bekommt davon nichts mit.

Lösung:
statt ein Shellskipt auszuführen (d.h. einen Tochterprozess zu erstellen, auf den sich alle Variablenänderungen des Skripts auswirken), müssen die Befehle des Skripts in der aktuellen Shell ausgeführt werden. Wenn dein Skript xxx heißt, startest du es also nicht mit
$ ./xxx
sondern sagst
$ source xxx
oder
$ . xxx

Bei diesem sogenannten "sourcen" des Skripts werden die enthaltenen Befehle so behandelt, als würdest du sie direkt in die aktuelle Shell eintippen. Die erste Zeile "#!/bin/bash" wird somit als Kommentar behandelt und ist überflüssig. So ein "ge-source-tes" Skript muß logischerweise in der Sprache der aktuellen Shell verfasst sein: Wer mit tcsh arbeitet, darf da keine bash-Syntax verwenden.

Beispiel:
Code:
$ echo $SHELL
/bin/bash
$ cat >xxx <<EOF
> #!/bin/bash
> export VARI=neu
> EOF
$ chmod a+x xxx
$ export VARI=alt
$ echo $VARI
alt
$ ./xxx
$ echo $VARI
alt
$ source xxx
$ echo $VARI
neu
$
 
Zuletzt bearbeitet:
Zurück
Oben