
Ich versuche Folgendes: Ich habe einen Ordner für Code-Repositorys und suche nach einem Bash-Befehl, der das „Code-Stammverzeichnis“ des aktuellen Arbeitsverzeichnisses angeben kann. Wenn ich mich beispielsweise gerade in befinde, ~/repositories/my_program/folder1/folder2/
soll der Befehl zurückgeben ~/repositories/my_program/
.
Ich kann den Arbeitsverzeichnispfad pwd
und eine Liste der Projekte mithilfe von abrufen ls ~/repositories/
. Wie ermittle ich, welcher der ~/repositories/<match>
Strings ein Präfix von ist pwd
?
Antwort1
Wenn Sie nur das Verzeichnis direkt darunter möchten ~/repositories
, können Sie Folgendes tun:
$ sed -r "s#($HOME/repositories/[^/]*).*#\1#" <<<$PWD
/home/terdon/repositories/my_program
Und nur zum Drucken my_program
:
$ sed -r "s#$HOME/repositories/([^/]*).*#\1#" <<<$PWD
my_program
Versuchen ~/
Sie stattdessen
$ sed -r "s#$HOME(/repositories/[^/]*).*#~\1#" <<<$PWD
~/repositories/my_program
Die Idee besteht darin, und dann ein weiteres Verzeichnis abzugleichen $HOME/repositories/
(definiert als die längste Zeichenfolge, die nicht aus - /
Zeichen besteht: [^/]*
).