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

1500voto

Charles Duffy Punkte 255246

Es besteht keine Notwendigkeit für basename und insbesondere keine Notwendigkeit für eine Subshell, in der pwd ausgeführt wird (was ein zusätzlicher und teurer Gabelvorgang ); die Shell kann dies intern mit Parametererweiterung :

result=${PWD##*/}          # to assign to a variable

printf '%s\n' "${PWD##*/}" # to print to stdout
                           # ...more robust than echo for unusual names
                           #    (consider a directory named -e or -n)

printf '%q\n' "${PWD##*/}" # to print to stdout, quoted for use as shell input
                           # ...useful to make hidden characters readable.

Beachten Sie, dass Sie diese Technik auch in anderen Situationen anwenden können (nicht PWD , sondern eine andere Variable, die einen Verzeichnisnamen enthält), müssen Sie eventuell nachfolgende Schrägstriche abschneiden. Im Folgenden wird die Bash-Funktion extglobale Unterstützung auch bei mehreren Schrägstrichen am Ende funktioniert:

dirname=/path/to/somewhere//
shopt -s extglob           # enable +(...) glob syntax
result=${dirname%%+(/)}    # trim however many trailing slashes exist
result=${result##*/}       # remove everything before the last / that still remains
printf '%s\n' "$result"

Alternativ dazu, ohne extglob :

dirname="/path/to/somewhere//"
result="${dirname%"${dirname##*[!/]}"}" # extglob-free multi-trailing-/ trim
result="${result##*/}"                  # remove everything before the last /

567voto

Arkady Punkte 12965

Verwenden Sie die basename Programm. Für Ihren Fall:

% basename "$PWD"
bin

35voto

mbelos Punkte 423

Sie können eine Kombination aus pwd und basename verwenden. z.B.

#!/bin/bash

CURRENT=`pwd`
BASENAME=`basename "$CURRENT"`

echo "$BASENAME"

exit;

32voto

abc Punkte 1

Verwendung:

basename "$PWD"

OR

IFS=/ 
var=($PWD)
echo ${var[-1]} 

Stellen Sie den internen Dateinamen-Trenner (IFS) wieder auf Leerzeichen.

IFS= 

Nach dem IFS steht ein Leerzeichen.

21voto

Orange Punkte 215

Wie wäre es mit grep:

pwd | grep -o '[^/]*$'

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