심볼릭 링크를 통해 cd할 때 pwd가 실제 경로 대신 심볼릭 링크를 표시하는 이유는 무엇입니까?

심볼릭 링크를 통해 cd할 때 pwd가 실제 경로 대신 심볼릭 링크를 표시하는 이유는 무엇입니까?

ln -s 1 2디렉토리 안의 디렉토리를 가리키는 소프트링크()를 생성하고 test()를 이용하여 소프트링크를 열어 cd 2현재 경로를 표시했습니다 pwd. 표시된 경로는 ~/test/2, 가 아닙니다 ~/test/1.

단축키를 사용하면 실제 디렉토리로 이동하는 Windows와 같은 운영 체제에서는 그렇지 않습니다. 이 소프트 링크가 Linux에서 어떻게 작동하는지 약간 혼란스럽습니다. 이것은 에서와 같은 단축키가 아닌가요 Windows? 왜 경로가 아닌가 ~/test/1?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2

답변1

이것은 현재 위치에 어떻게 도달했는지 기억하는 쉘의 기능입니다.
이미 realpath설치되어 있는 경우 다음을 수행할 수 있습니다.

$ realpath 
/home/dazz/test/1

Python이 있는 경우 누락되었습니다.

$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1

또는 readlink(coreutils에서):

$ readlink -f .
/home/dazz/test/1

또는 /bin/pwd(쉘 내장이 아님 pwd):

$ /bin/pwd
/home/dazz/test/1

답변2

대비 pwd/bin/pwd.

pwd, 이는 쉘이 사용자가 어디에 있다고 생각하는지 알려주는 내장 명령입니다. 따라서 심볼릭 링크 "소프트 링크"를 실제 디렉토리로 처리합니다.

/bin/pwd필요한 경우 파일 시스템 트리를 탐색하여 실제 위치를 알려줄 수 있는 외부 프로그램입니다 /. 위쪽으로 이동할 때는 심볼릭 링크가 존재하지 않기 때문에 심볼릭 링크를 고려하지 않습니다...

답변3

다른 답변은 이미 /bin/pwdshells 작업에 대해 다루었습니다 builtin pwd.

언급한 Windows 스타일 심볼릭 링크를 따르려면 다음을 사용하십시오 cd -P. 그에 따라 PWD 변수가 변경됩니다.

기본적으로 사용 하려면 다음 줄을 또는 -P에 추가하면 됩니다 ..bashrc.zshrc

set -P

다른 인클로저는 다를 수 있습니다.

관련 정보