
Ein einfaches Skript:
echo "file: $0"
wenn es wie folgt aufgerufen wird:
bash myscript.sh
oder
./meinscript.sh
gibt den Dateinamen des Skripts ( file: myscript.sh
) wie erwartet zurück, aber beim Aufrufen:
Quelle myscript.sh
oder
. ./meinscript.sh
gibt den Shell-Namen ( bash
) anstelle des Skriptdateinamens an.
Warum ist das so?
Antwort1
Der erste Aufruf startet eine neue Instanz von Bash, um das Skript zu interpretieren, was bedeutet, dass Bash $0
seinen Pfad festlegt.
Der zweite Aufruf behandelt die Datei als ausführbare Datei und führt sie aus, sodass $0
auf sie verwiesen wird.
Die letzten beiden Aufrufe laden die Datei in die aktuelle Bash-Instanz und $0
verweisen daher dorthin.
NB: Für Nr. 2 muss die Datei ausführbar sein, für Nr. 1, 3 und 4 nicht.