심볼릭 링크를 통해 cd 할 때 pwd가 실제 경로 대신 심볼릭 링크를 표시하는 이유는 무엇입니까? ~/test/2아니었다 ~/test/1. Windows와 같은

ln -s 1 2디렉토리 안에있는 test디렉토리에 대한 소프트 링크 ( )를 작성하고 소프트 링크 ( )를 cd 2열고을 사용하여 현재 경로를 표시했습니다 pwd. 표시된 경로는 ~/test/2아니었다 ~/test/1.

Windows와 같은 OS에서는 다르므로 바로 가기를 사용하면 실제 디렉토리로 이동합니다. 이 소프트 링크가 Linux에서 작동하는 방식이 약간 혼란 스럽습니다. 과 같은 바로 가기가 Windows아닙니까? 경로가 아닌 이유는 무엇 ~/test/1입니까?

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



답변

그것은 당신이 어디에 있는지를 기억하는 쉘의 기능입니다.
이 경우 realpath설치 할 수있다 :

$ realpath 
/home/dazz/test/1

그리고 파이썬이 있다면 부족합니다.

$ 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


답변

대비 pwd/bin/pwd.

pwd, 많은 쉘에 내장 된 명령으로, 쉘이 자신을 생각하는 위치를 알려줍니다. 따라서 심볼릭 링크를 “소프트 링크”를 마치 실제 디렉토리처럼 취급합니다.

/bin/pwd필요한 경우 파일 시스템 트리를 순회하여 실제 위치를 알려주는 외부 프로그램입니다 /. 위쪽을 통과 할 때 존재하지 않는 심볼릭 링크를 고려하지 않습니다...


답변

다른 답변은 /bin/pwd셸과 비교했습니다 builtin pwd.

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

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

set -P

다른 껍질은 다를 수 있습니다.


답변