it-swarm.com.de

Liefert den letzten Verzeichnisnamen / Dateinamen in einem Dateipfadargument in Bash

Ich versuche, einen Post-Commit-Hook für SVN zu schreiben, der auf unserem Entwicklungsserver gehostet wird. Mein Ziel ist es, eine Kopie des zugesicherten Projekts automatisch in das Verzeichnis auszuchecken, in dem es auf dem Server gehostet wird. Ich muss jedoch in der Lage sein, nur das letzte Verzeichnis in der an das Skript übergebenen Verzeichniszeichenfolge zu lesen, um in dasselbe Unterverzeichnis auszuchecken, in dem sich unsere Projekte befinden.

Wenn ich zum Beispiel ein SVN-Commit für das Projekt "example" durchführe, erhält mein Skript "/ usr/local/svn/repos/example" als erstes Argument. Ich muss nur "example" vom Ende der Zeichenfolge entfernen und es dann mit einer anderen Zeichenfolge verknüpfen, damit ich zu "/ server/root/example" auschecken und die Änderungen sofort live sehen kann.

191
tj111

basename entfernt das Verzeichnispräfix eines Pfades:

$ basename /usr/local/svn/repos/example
example
$ echo "/server/root/$(basename /usr/local/svn/repos/example)"
/server/root/example
301
sth

Der folgende Ansatz kann verwendet werden, um einen beliebigen Pfad eines Pfadnamens abzurufen:

pathname=a/b/c
echo $(basename $pathname)
echo $(basename $(dirname $pathname))
echo $(basename $(dirname $(dirname $pathname)))

Ausgabe:

c
b
a
78
Jingguo Yao

Bash kann den letzten Teil eines Pfades abrufen, ohne das externe basename aufrufen zu müssen:

subdir="/path/to/whatever/${1##*/}"
69