[gelöst]Pfadangabe aufsplitten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
fiberkill
Beiträge: 221
Registriert: 28.03.2007 09:08:30

[gelöst]Pfadangabe aufsplitten

Beitrag von fiberkill » 14.01.2015 13:33:01

Hallo zusammen,

ich möchte aus dem Ergebnis von pwd nur das letzte Verzeichnis als Ausgabe erhalten.
habt Ihr eine Idee ??

Danke

Gruß fk
Zuletzt geändert von fiberkill am 14.01.2015 13:59:56, insgesamt 1-mal geändert.

Benutzeravatar
hikaru
Moderator
Beiträge: 13907
Registriert: 09.04.2008 12:48:59

Re: Pfadangabe aufsplitten

Beitrag von hikaru » 14.01.2015 13:42:40

Sowas?:

Code: Alles auswählen

$ mkdir -p test1/test2/test3
$ cd test1/test2/test3
$ pwd
/home/hikaru/test1/test2/test3
$ pwd | egrep -o '[^/]*$'
test3

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Pfadangabe aufsplitten

Beitrag von 4A4B » 14.01.2015 13:43:48

... oder einfach mit basename:

Code: Alles auswählen

basename $(pwd)

fiberkill
Beiträge: 221
Registriert: 28.03.2007 09:08:30

Re: Pfadangabe aufsplitten

Beitrag von fiberkill » 14.01.2015 13:59:26

cool, klappt.

Danke

uname
Beiträge: 12402
Registriert: 03.06.2008 09:33:02

Re: [gelöst]Pfadangabe aufsplitten

Beitrag von uname » 14.01.2015 14:01:35

Gehört zum genialen Paket Debiancoreutils. Gibt noch weitere nette Software in dem Paket, die man sich mal anschauen sollte. Damit kann man recht schnell sein Linux-Wissen erweitern.

Code: Alles auswählen

dpkg -L coreutils|fgrep "/usr/bin/"

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: [gelöst]Pfadangabe aufsplitten

Beitrag von newdeb » 14.01.2015 16:21:56

Code: Alles auswählen

echo ${PWD##*/}

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: [gelöst]Pfadangabe aufsplitten

Beitrag von heinz » 14.01.2015 18:20:15

@ newdeb

Code: Alles auswählen

echo ${PWD##*/}
Könntest Du kurz erleutern wie das funktioniert? Danke.

gruß heinz

Benutzeravatar
hikaru
Moderator
Beiträge: 13907
Registriert: 09.04.2008 12:48:59

Re: [gelöst]Pfadangabe aufsplitten

Beitrag von hikaru » 14.01.2015 20:57:11

Das ist eine Bash-eigene* Stringmanipulation die in diesem Fall von $PWD das wegschneidet, was links (dafür das erste #) des Patterns */ steht (* ist hier eine Expansion). Dabei wird "gierig" vorgegangen (dafür das zweite #).
Siehe auch: [1] und [2]. Gefunden habe ich es hier [3]. Man lernt doch nie aus!
@newdeb: Danke!


*) ksh kann es wohl auch. Trotzdem bleibt es ein "Bashism".
[1] http://linuxint.com/DOCS/Linux_Docs/ope ... AE1F0211CE
[2] http://mywiki.wooledge.org/BashFAQ/073
[3] http://forum.ubuntuusers.de/topic/strin ... inem-buch/

Benutzeravatar
Meillo
Moderator
Beiträge: 9235
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst]Pfadangabe aufsplitten

Beitrag von Meillo » 15.01.2015 09:37:16

hikaru hat geschrieben:Das ist eine Bash-eigene* Stringmanipulation [...]
Nein, das ist in POSIX! Siehe http://pubs.opengroup.org/onlinepubs/96 ... g_18_06_02

Diese Formen mit %, %%, #, ## gibt's schon ziemlich lange. Die Bash hat aber noch einiges mehr, was nicht alles portabel ist.


@newdeb: Guter Vorschlag uebrigens!
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13907
Registriert: 09.04.2008 12:48:59

Re: [gelöst]Pfadangabe aufsplitten

Beitrag von hikaru » 15.01.2015 10:37:41

tcsh kann es nicht:

Code: Alles auswählen

$ echo ${PWD##*/}
Missing }.
$ echo $SHELL
/bin/csh
Ist tcsh nicht POSIX-konform?

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: [gelöst]Pfadangabe aufsplitten

Beitrag von newdeb » 15.01.2015 12:00:38

Meillo hat geschrieben:Diese Formen mit %, %%, #, ## gibt's schon ziemlich lange.
Diese Konstrukte sparen forks, die beim Aufruf externer Programme notwendig wären und zumindest die o.g. werden von bash, dash und ksh verstanden.
Zu Zeiten der alten Bourne-Shell (unter Solaris noch bis zu Version 10 die Systemshell /bin/sh) musste man das mit externen Programmen machen.
(In der ksh93 lassen sich einige der Coreutils wie basename, cat, cat, wc, u.a. als Builtins über den /opt/ast/bin-Pfad aktivieren).

Benutzeravatar
Meillo
Moderator
Beiträge: 9235
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst]Pfadangabe aufsplitten

Beitrag von Meillo » 15.01.2015 12:06:26

hikaru hat geschrieben:tcsh kann es nicht:

Code: Alles auswählen

$ echo ${PWD##*/}
Missing }.
$ echo $SHELL
/bin/csh
Ist tcsh nicht POSIX-konform?
tcsh ist eine csh, also keine Bourne-kompatible Shell und damit AFAIK gar nicht Teil von POSIX. Das ist eine andere Shell-Familie, bei der nur (zufaellig) Teile der Syntax gleich sind.
Use ed once in a while!

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: [gelöst]Pfadangabe aufsplitten

Beitrag von heinz » 16.01.2015 12:46:09

Danke hikaru für die Erklärung und die weiterführenden Links.

gruß heinz

Antworten