내가 따라온 튜토리얼 중 하나는 cd .
작동하지 않는다고 간략하게 설명합니다. OP에 표시된 문제를 재현하려고 할 때Symlink 재귀 - "재설정"이 되는 이유는 무엇입니까?, 나도 시도해 보았는데 cd .
OP에서 설명한 것과 동일한 효과( $PWD
변수 증가)가 나타났습니다. 이를 상쇄하는 데 사용할 수 있습니다 cd -P
.
사람들이 실제로 를 사용하고 싶어하는 상황이 있을까요 cd .
?
답변1
나는 이것이 지나친 생각의 문제라고 생각한다. cd .
아마도 일반적인 경우에 사람들이 수동으로 실행하는 것은 아니지만 프로그래밍 방식으로 실행될 수 있는 것은 분명합니다( cd
사용자가 경로를 제공한 파일이 포함된 디렉터리로 이동할 수 있는 상황을 생각해 보세요). 따라서 특정 목적을 가질 필요는 없습니다. 일반적인 의미를 만족하는 한 cd <some-path>
유용합니다.
답변2
마지막 명령이 실행된 이후 디렉토리 경로가 변경되었을 수 있으며 cd .
bash 및 ksh93 쉘이 없으면 질문에 링크된 게시물에 설명된 논리적 작업 디렉토리에 의존하게 되므로 이를 호출하면 쉘이 시스템을 cd .
실행하게 됩니다. getcwd()
호출하면 현재 경로가 여전히 유효한지 확인할 수 있습니다.
Bash에서 재현하는 단계:
- 터미널 탭 문제
mkdir ./dir_no_1; cd ./dir_no_1
- 다른 터미널 탭 문제
mv dir_no_1 dir_no_2
- 첫 번째 터미널 탭
echo $PWD
관련 문제pwd
디렉토리 이름이 외부적으로 변경되었으며 셸 환경이 업데이트되지 않았습니다. - 질문
cd .; pwd; echo $PWD
. 값이 업데이트되었으니 참고하세요.
그러나 ksh93은 환경 정보를 업데이트하지 않으므로 cd .
ksh93에서는 실제로 유용하지 않을 수 있습니다. /bin/dash
Ubuntu 및 기타 Debian 기반 시스템 에서는 오류를 cd .
반환 하지만 작동합니다(ksh93과 달리).dash: 3: cd: can't cd to .
cd -P .
답변3
또 다른 사용 사례는 cd .
현재 있는 디렉토리가 삭제된 다음 다시 생성되는 경우입니다. 다음을 시도해보세요 -
- 디렉터리 생성
temp
cd temp
그런 다음ls
- 다른 터미널을 열고 디렉토리를 삭제한 후 다시 생성하십시오.
temp
- 첫 번째 터미널에서 돌아와서 ls를 실행해 보세요. 이로 인해 오류가 발생합니다.
ls: cannot open directory .: Stale file handle
cd .
그런 다음 ls를 실행하면 작동합니다.
답변4
프로그래밍 관점에서 보면 무작동(no-op)으로 유용합니다. 외부 입력에서 제공되는 경로를 고려하세요.
read -p "Path to file: " p
dirn=$(dirname "$p")
file=$(basename "$p")
echo "dirn=$dirn, file=$file"
cd "$dirn"
ls -ld "$file"
"fred.txt"와 같은 경로를 사용하면 디렉토리는 다음 .
과 같이 됩니다.cd .