cd합니다. 사용 했습니까? .가 소용이 없다고 간단히

내가 따랐던 튜토리얼 중 하나 cd .가 소용이 없다고 간단히 언급했다 . 기호 링크 재귀 에서 OP로 표시되는 문제를 복제하려고 할 때 무엇이 “재설정”됩니까? , 나는 또한 cd .OP와 같은 효과 (증가 $PWD변수) 를 보여주었습니다 cd -P.

이것은 실제로 궁금해합니다. 실제로 사용하고 싶은 경우가 cd . 있습니까?



답변

나는 이것이 문제를 지나치게 생각하고 있다고 생각합니다. cd .일반적인 과정에서 수동으로 실행할 수는 없지만 프로그래밍 방식으로 실행될 수 있습니다 ( cd사용자가 경로를 제공하는 파일을 포함하는 디렉토리 에 어떤 상황이 있는지 생각 하십시오) ). 따라서 특정 용도를 사용할 필요는 없습니다. 일반적인 의미를 충족하는 한 cd <some-path>유용합니다.


답변

마지막 명령이 실행 된 이후 디렉토리의 경로가 변경되었을 수 있으며 cd ., bash 및 ksh93 쉘이 없으면 질문에 링크 된 게시물에 설명 된 논리 작업 디렉토리에 의존하므로 syscall을 호출하면 cd .쉘 문제가 발생 getcwd()합니다. 현재 경로는 여전히 유효합니다.

bash에서 재현하는 단계 :

  1. 터미널 탭 문제 mkdir ./dir_no_1; cd ./dir_no_1
  2. 다른 터미널 탭 문제 mv dir_no_1 dir_no_2
  3. 첫 번째 터미널 탭에서 echo $PWDpwd. 디렉토리 이름이 외부에서 바뀐 것을 알 수 있습니다. 쉘 환경이 업데이트되지 않았습니다.
  4. 문제 cd .; pwd; echo $PWD. 값이 업데이트되었습니다.

그러나 ksh93은 환경 정보를 업데이트하지 않으므로 cd .ksh93에서는 실제로 쓸모가 없습니다. 에서 /bin/dash우분투와 다른 데비안 기반 시스템에서, cd .반환 dash: 3: cd: can't cd to .그러나 오류 cd -P .(ksh93과 달리) 작동합니다.


답변

또 다른 유스 케이스는 cd .현재있는 디렉토리가 삭제 된 다음 다시 만들어진 경우입니다. 다음을 시도해보십시오-

  1. 디렉토리 만들기 temp
  2. cd temp 그런 다음 ls
  3. 다른 터미널을 열고 해당 디렉토리를 삭제 한 후 다시 작성하십시오. temp
  4. 첫 번째 터미널에서 ls를 시도하십시오. 오류가 발생합니다-ls: cannot open directory .: Stale file handle
  5. cd . 그리고 잘 작동합니다.

답변

“관심이있는”곳을 가리키고 싶지 않은 경우가 있으면 $OLDPWDquick로 정리할 수 있습니다 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/shFreeBSD 및 NetBSD)은로 변환 cd ""될 것이다 cd .. 이것은 변수가 매개 변수로 사용될 수있는 쉘 스크립트에서 프로그래밍 방식의 사용을 지원하는 기능으로 설명 될 수있다 (즉, 빈 변수 대체를 ” FreeBSD 커밋 히스토리는 POSIX 지원을 추가하여 실패를 막기 위해 POSIX 지원을 추가했기 때문에 변경 사항이 발생하지 않았지만 chdir("")POSIX 명령이 실패해야 한다고 말합니다 .

일부 다른 쉘은 .현재 작업 디렉토리에 대한 완전한 경로 이름으로 저장 한 것으로 대체 할 것이므로 Sahil Agarwal의 답변 에서 언급 된 동작을 허용 할 수 있습니다 .