Was bedeutet der Punkt vor dem Aufruf eines Skripts
Hallo,
ich habe hier ein Bash Skript vom Kollegen. Dieses Skript ruft ein weiteres Skript auf und benutzt Variablen aus dem ersten Skript. Wieso kann man im zweiten Skript nur auf die Variablen Zugreifen wenn man das zweite Skript mit einem Punkt startet. Hier ein Beispiel:
Datei 1
Datei 2
Ist der Code so geschrieben klappt es. Lass ich den Puntk weg ist $VARI leer ("./DATEI2.sh" anstatt ". ./DATEI2.sh")
Weiss vielleicht jemand wieso das so ist?
Danke schön,
mfG
ich habe hier ein Bash Skript vom Kollegen. Dieses Skript ruft ein weiteres Skript auf und benutzt Variablen aus dem ersten Skript. Wieso kann man im zweiten Skript nur auf die Variablen Zugreifen wenn man das zweite Skript mit einem Punkt startet. Hier ein Beispiel:
Datei 1
#!/bin/sh
VARI="Hallo"
. ./DATEI2.sh
Datei 2
#!/bin/sh
echo $VARI
Ist der Code so geschrieben klappt es. Lass ich den Puntk weg ist $VARI leer ("./DATEI2.sh" anstatt ". ./DATEI2.sh")
Weiss vielleicht jemand wieso das so ist?
Danke schön,
mfG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 164199
Url: https://administrator.de/contentid/164199
Ausgedruckt am: 23.11.2024 um 09:11 Uhr
6 Kommentare
Neuester Kommentar
Ich möchte es mal so erklären.
Normalerweise werden alle Scripte beim Starten in einer Sub-Shell abgearbeitet.
Das heißt, es gelten da nur Variablen, die auch in der Start (oder Vater-)Shell exportiert wurden.
In deinem 1. Script wird VARI aber nicht exportiert und damit diese Variable auch im nächsten Script gültig ist, wird es _ohne_ weitere Sub-Shell aufgerufen.
=> mit dem . wird also _keine_ weitere Sub-Shell aufgerufen, sondern das Script startet in der aktuellen Shell.
Oder Datei 1 so:
Normalerweise werden alle Scripte beim Starten in einer Sub-Shell abgearbeitet.
Das heißt, es gelten da nur Variablen, die auch in der Start (oder Vater-)Shell exportiert wurden.
In deinem 1. Script wird VARI aber nicht exportiert und damit diese Variable auch im nächsten Script gültig ist, wird es _ohne_ weitere Sub-Shell aufgerufen.
=> mit dem . wird also _keine_ weitere Sub-Shell aufgerufen, sondern das Script startet in der aktuellen Shell.
Oder Datei 1 so:
#!/bin/sh
export VARI="Hallo"
sh ./DATEI2.sh
Moin Cubic83,
Letzteres. Die Variable steht in der aktuellen Umgebung (=in der aktuellen Shell-Instanz) zur Verfügung und ist dort sichtbar.
UND in allen "Child"-Instanzen, also neuen Shells (oder Unterprogrammen), die von ihr aufgerufen/neu gestartet werden.
Das darüberliegende "Super"-Environment ist zwar verfügbar (sichtbar), kann aber nicht dauerhaft geändert oder gar gelöscht werden.
Grüße
Biber
Letzteres. Die Variable steht in der aktuellen Umgebung (=in der aktuellen Shell-Instanz) zur Verfügung und ist dort sichtbar.
UND in allen "Child"-Instanzen, also neuen Shells (oder Unterprogrammen), die von ihr aufgerufen/neu gestartet werden.
Das darüberliegende "Super"-Environment ist zwar verfügbar (sichtbar), kann aber nicht dauerhaft geändert oder gar gelöscht werden.
Grüße
Biber