내가 따랐던 튜토리얼 중 하나 cd .
가 소용이 없다고 간단히 언급했다 . 기호 링크 재귀 에서 OP로 표시되는 문제를 복제하려고 할 때 무엇이 “재설정”됩니까? , 나는 또한 cd .
OP와 같은 효과 (증가 $PWD
변수) 를 보여주었습니다 cd -P
.
이것은 실제로 궁금해합니다. 실제로 사용하고 싶은 경우가 cd .
있습니까?
답변
나는 이것이 문제를 지나치게 생각하고 있다고 생각합니다. cd .
일반적인 과정에서 수동으로 실행할 수는 없지만 프로그래밍 방식으로 실행될 수 있습니다 ( cd
사용자가 경로를 제공하는 파일을 포함하는 디렉토리 에 어떤 상황이 있는지 생각 하십시오) ). 따라서 특정 용도를 사용할 필요는 없습니다. 일반적인 의미를 충족하는 한 cd <some-path>
유용합니다.
답변
마지막 명령이 실행 된 이후 디렉토리의 경로가 변경되었을 수 있으며 cd .
, bash 및 ksh93 쉘이 없으면 질문에 링크 된 게시물에 설명 된 논리 작업 디렉토리에 의존하므로 syscall을 호출하면 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
우분투와 다른 데비안 기반 시스템에서, cd .
반환 dash: 3: cd: can't cd to .
그러나 오류 cd -P .
(ksh93과 달리) 작동합니다.
답변
또 다른 유스 케이스는 cd .
현재있는 디렉토리가 삭제 된 다음 다시 만들어진 경우입니다. 다음을 시도해보십시오-
- 디렉토리 만들기
temp
cd temp
그런 다음ls
- 다른 터미널을 열고 해당 디렉토리를 삭제 한 후 다시 작성하십시오.
temp
- 첫 번째 터미널에서 ls를 시도하십시오. 오류가 발생합니다-
ls: cannot open directory .: Stale file handle
cd .
그리고 잘 작동합니다.
답변
“관심이있는”곳을 가리키고 싶지 않은 경우가 있으면 $OLDPWD
quick로 정리할 수 있습니다 cd .
. 또한 영향을 미칩니다 cd -
.
답변
프로그래밍 방식으로 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 .
답변
잘못된 USB 케이블로 작업해야하는 경우에 일반적입니다. 장치의 연결이 끊어졌다가 다시 연결되고 동일한 디렉토리에 자동 마운트 된 cd .
후 다시 작동 하려면 사용해야 합니다.
답변
“.” 이다 (물론 쉘 프로세스 포함) 및 모든 프로세스의 현재 작업 디렉토리로 열려있는 파일의 이름을 지정하는 적절한 방법은 “.” 현재 작업 디렉토리를 포함하여 모든 디렉토리에있는 파일의 유효한 이름입니다. .
기본 현재 작업 디렉토리가 제거 된 경우 (또는 오래된 NFS 핸들과 같이 “나쁜”상태가 된 경우) 올바른 이름 인 경우 프로세스의 지정된 인스턴스에 대해 파일 이름이 올바른 이름 이 아닐 수 있습니다. 유효한 모든 디렉토리에 존재하도록 보장 된 파일의
따라서 디렉토리 이름을 허용하는 모든 명령에 대해 유효한 인수 .
여야 하므로 표준 쉘 cd .
에서 유효한 명령이어야합니다.
cd .
유용한 지 여부 는 셸 구현에 따라 다릅니다. 언급했듯이 기본 chdir
시스템 호출 을 호출 한 후 쉘이 현재 작업 디렉토리의 전체 경로 이름에 대한 내부 아이디어를 재설정하는 경우에 유용 할 수 있습니다 ( 예 : 기본 디렉토리 (또는 일부 상위 디렉토리)의 이름이 변경된 경우).
내가 아는 적어도 일부 쉘 ( /bin/sh
FreeBSD 및 NetBSD)은로 변환 cd ""
될 것이다 cd .
. 이것은 변수가 매개 변수로 사용될 수있는 쉘 스크립트에서 프로그래밍 방식의 사용을 지원하는 기능으로 설명 될 수있다 (즉, 빈 변수 대체를 ” FreeBSD 커밋 히스토리는 POSIX 지원을 추가하여 실패를 막기 위해 POSIX 지원을 추가했기 때문에 변경 사항이 발생하지 않았지만 chdir("")
POSIX 명령이 실패해야 한다고 말합니다 .
일부 다른 쉘은 .
현재 작업 디렉토리에 대한 완전한 경로 이름으로 저장 한 것으로 대체 할 것이므로 Sahil Agarwal의 답변 에서 언급 된 동작을 허용 할 수 있습니다 .