macOS에서 이상한 CD 동작을 설명하는 방법은 무엇입니까?

macOS에서 이상한 CD 동작을 설명하는 방법은 무엇입니까?

내 시스템은 macOS 13.2.1이고 쉘은 oh-my-zsh입니다(bash에서도 동일한 동작). cd명령에서 이상한 동작을 발견했습니다 . 현재 디렉터리를 잘못된 디렉터리로 변경합니다. 올바른 경로에 디렉터리가 없기 때문에 이는 소프트 링크로 인해 발생하지 않습니다.

!w /Library/TeX/texbin ........................................................................................................... 14:56:24
> cd ../../texmf-dist

!w /usr/local/texlive/2021/texmf-dist ............................................................................................ 14:56:40
> cd -               
/Library/TeX/texbin

!w /Library/TeX/texbin ........................................................................................................... 14:56:42
> cd ../../          

!w /Library ...................................................................................................................... 14:56:51
> cd texmf-dist      
cd: no such file or directory: texmf-dist

답변1

모호함을 유발하는 /Library/TeX심볼릭 링크를 언급하고 있습니다 ./usr/local/texlive/2021/universal-darwin/

/Library/TeX/texbin(실제로 ) 들어가서 /usr/local/texlive/2021/universal-darwin/texbin실행 하면 cd ../..쉘은 링크가 존재하는지 확인합니다 /Library/texmf-dist. 즉, 링크에 액세스하는 데 사용한 경로를 기억하고 각 경로 요소를 제거하여 ..실행된 단계 링크를 효과적으로 실행 취소합니다. 결국 에 들어가고 존재 /Library하지 /Library/texmf-dist않으므로 cd결국 작동하지 않습니다.

마찬가지로, cd ../../texmf-dist가려고 시도 /Library/texmf-dist하지만 존재하지 않습니다. 하지만 여기서는 심볼릭 링크를 기억할 필요 없이 경로가 실제 위치에서 적합한지 확인합니다. /usr/local/texlive/2021/texmf-dist쉘이 심볼릭 링크를 통해 경로를 잊어버려야 하므로 경로가 어떻게 완전히 변경되는지 확인하세요 .

돌아가서 /Library/TeX/texbin실행 하면 심볼릭 링크를 다시 잊어버리고 "물리적" 경로를 사용하게 되며 다시 잘 작동하게 될 것 cd -P ../..입니다 ./usr/local/texlive/2021cd texmf-dist

구조는 다음과 같습니다. 차이점은 ..위로 올라갈 때 선택한 경로 에서 비롯됩니다 universal-darwin(다른 디렉토리는 심볼릭 링크가 아니라고 가정합니다).

/Library -> Tex - - - -(symlink)- - +
                                    v
/usr -> local -> texlive -> 2021 -> universal-darwin -> texbin
                              |
                              +---> texfmt-dist

쉘이 사용자가 사용하는 심볼릭 링크를 기억하는 방식은 유용성 기능입니다. 이는 많은 경우 더 나은 이름으로 심볼릭 링크를 생성하고 한 시간 동안 검색할 수 있는 경우 무언가가 실제로 어디에 있는지 기억할 필요가 없음을 의미합니다. 다른 것 ~/thingy보다 /net/fileserver1/disk02/dir/thingy기억하기 쉽습니다 .

그러나 이는 디렉토리 트리가 그렇지 않음을 의미합니다.나무더 이상 "위"가 모호해집니다.

따라서 심볼릭 링크 대상이 "초과"되면 충돌이 발생할 수 있습니다. 특히, 쉘에서 시작된 프로그램은 쉘이 심볼릭 링크의 내용을 기억한다는 사실을 알지 못하며 항상 "물리적" 상위 디렉토리를 사용합니다. 예를 들어 귀하의 경우 /Library/TeX심볼릭 링크 로 ls ..실행하면 cd ..; ls.

관련 정보