[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 /
답변
답변
$ 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##*/}
사용할 수없는 경우