Bash 스크립트에서 현재 디렉토리 이름 (전체 경로없이) 가져 오기 bash 스크립트 또는 현재 터미널 명령으로

bash 스크립트 또는 현재 터미널 명령으로 현재 작업 디렉토리 이름을 얻는 방법은 무엇입니까?

pwd현재 작업 디렉토리의 전체 경로를 제공 /opt/local/bin하지만 예를 들어bin



답변

기본 이름이 필요하지 않으며 특히 pwd를 실행하는 서브 쉘이 필요하지 않습니다 ( 추가적이고 값 비싼 포크 작업을 추가 함 ). 쉘은 매개 변수 확장을 사용하여 내부적 으로이 작업을 수행 할 수 있습니다 .

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.

다른 상황에서 (이 아닌 PWD디렉토리 이름을 가진 다른 변수) 에이 기술을 적용하는 경우 후행 슬래시를 잘라야 할 수도 있습니다. 아래는 bash의 extglob 지원 을 사용 하여 후행 슬래시가 여러 개인 경우에도 작동합니다.

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"

또는 extglob: 없이

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

답변

basename프로그램을 사용하십시오 . 귀하의 경우 :

% basename "$PWD"
bin

답변

$ echo "${PWD##*/}"

​​​​​


답변

pwd와 basename의 조합을 사용할 수 있습니다. 예 :

#!/bin/bash

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

echo "$BASENAME"

exit;

답변

grep은 어떻습니까 :

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

답변

선택한 답변 (Charles Duffy)이 마음에 들지만 심볼릭 디렉토리에 있고 대상 디렉토리의 이름을 원할 경우주의하십시오. 불행히도 단일 매개 변수 확장 식으로 수행 할 수 있다고 생각하지 않습니다. 아마도 실수입니다. 이것은 작동해야합니다 :

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

이것을보기 위해 실험 :

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

“바”보고서

DIRNAME

경로의 주요 디렉토리를 표시하려면 (/ usr / bin / dirname의 fork-exec가 발생하지 않음) :

echo ${target_PWD%/*}

예를 들어 foo / bar / baz-> foo / bar 변환


답변

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

Bourne 쉘을 사용 중이거나 ${PWD##*/}사용할 수없는 경우