Problem:

In einem Shell-Skript aus einer Umgebungsvariable, die einen Pfad enthält das letzte Verzeichnis löschen und einer anderen Variable zuweisen.

Lösung:

cut Tool benutzen.

Beispiel-Skript

#!/bin/sh

# Pfad zum Skript in die Umgebungsvariable SCRIPTPATH speichern (z.B. "/Users/jk/projects/cut/bin")
SCRIPTPATH=$(cd `dirname -- $0` && pwd)

# "/bin" entfernen:
BASEPATH=$(echo $SCRIPTPATH | rev | cut -d '/' -f 2- | rev)

# sollte z.B. "/Users/jk/projects/cut" ausgeben (also Skript Verzeichnis gekürzt um ein Verzeichnis)
echo $BASEPATH

Und so funktionierts

Als Beispiel-Pfad speichern wir das aktuelle Script-Verzeichnis in der Variable SCRIPTPATH, also z.B. /Users/jk/projects/cut/bin.

Die Variable geben wir mit echo $SCRIPTPATH aus, kehren sie mit rev um in nib/tuc/stcejorp/kj/sresU/ und teilen sie mit cut in eine Liste. Als “Schnittpunkte” nutzen wir /. Dann schneiden wir das erste Element um (da wir den String vorher umgekehrt haben, ist das erste Element das letzte Verzeichis). Das Ergebnis gibt cut wieder aus: tuc/stcejorp/kj/sresU/ und wir leiten es erneut durch rev was es wieder umkehrt zu dem gewünschten Ergebnis /Users/jk/projects/cut. Dieses speichern wir dann mit $( ... ) in die Variable $BASEPATH. Diese geben wir dann mit echo aus.