1156 Stimmen

Abfrage des aktuellen Verzeichnisnamens (ohne vollständigen Pfad) in einem Bash-Skript

Wie würde ich nur den Namen des aktuellen Arbeitsverzeichnisses in einem Bash-Skript, oder noch besser, nur einen Terminal-Befehl erhalten.

pwd gibt den vollständigen Pfad des aktuellen Arbeitsverzeichnisses an, z. B. /opt/local/bin aber ich will nur bin

14voto

user3278975 Punkte 129
basename $(pwd)

o

echo "$(basename $(pwd))"

14voto

rodvlopes Punkte 717

Dieser Thread ist großartig! Hier ist eine weitere Geschmacksrichtung:

pwd | awk -F / '{print $NF}'

11voto

FDS Punkte 4571

Mir gefällt die gewählte Antwort (Charles Duffy), aber seien Sie vorsichtig, wenn Sie sich in einem Symlink-Verzeichnis befinden und den Namen des Zielverzeichnisses wissen wollen. Leider glaube ich nicht, dass dies mit einem Expansionsausdruck mit nur einem Parameter möglich ist, vielleicht irre ich mich. Dies sollte funktionieren:

target_PWD=$(readlink -f .)
echo ${target_PWD##*/}

Um dies zu sehen, ein Experiment:

cd foo
ln -s . bar
echo ${PWD##*/}

meldet "bar"

DIRNAME

Um die führenden Verzeichnisse eines Pfades anzuzeigen (ohne eine fork-exec von /usr/bin/dirname auszulösen):

echo ${target_PWD%/*}

Dadurch wird z. B. aus foo/bar/baz -> foo/bar

8voto

anomal Punkte 2139
echo "$PWD" | sed 's!.*/!!'

Wenn Sie die Bourne-Shell oder ${PWD##*/} ist nicht verfügbar.

6voto

Arton Dorneles Punkte 1489

Überraschenderweise hat niemand diese Alternative erwähnt, die nur integrierte Bash-Befehle verwendet:

i="$IFS";IFS='/';set -f;p=($PWD);set +f;IFS="$i";echo "${p[-1]}"

Als ein zusätzlicher Bonus können Sie den Namen des übergeordneten Verzeichnisses leicht mit ermitteln:

[ "${#p[@]}" -gt 1 ] && echo "${p[-2]}"

Diese funktionieren mit Bash 4.3-Alpha oder neuer.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X