Problem:

Wie finde ich das Verzeichnis heraus, in dem die Script-Datei liegt, die gerade ausgeführt wird.

Lösung:

Die Spezial-Variable $0 und die Tools dirname und pwd kombinieren.

Beispiel-Script

#!/bin/sh

SCRIPTPATH=$(cd `dirname $0` && pwd)

echo $SCRIPTPATH

Und so funktionierts

In der Spezial-Variable $0 ist der Dateiname des Skripts gespeichert, das gerade ausgefürt wird.

Für das Script /Users/jk/bin/test.sh

#!/bin/sh

echo $0

lautet die Ausgabe also

/Users/jk/bin/test.sh

dirname gibt den Verzeichnisteil aus dem kompletten Pfad zurück (siehe man dirname) und mit cd wechseln wir in dieses Verzeichnis. Was an dieser Stelle identisch ist, mit dem Verzeichnis, in dem das Skript liegt, das gerade ausgeführt wird.

Ist die Befehlsfolge

cd `dirname $0` 

erfolgreich führen wir mit && noch ein pwd (aktuelles Verzeichnis ausgeben) aus und speichern die Ausgabe in der Variable SCRIPTPATH. Und damit haben wir schon das gewünschte Ergebnis.