답변:
그것은 당신이하는 일에 달려 있습니다. 우선 $PWD, 환경 변수이며 pwd쉘 내장 또는 실제 바이너리입니다.
$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
이제 bash 내장은 플래그 $PWD를 사용하지 않는 한 현재 값을 인쇄합니다 -P. 에 설명 된대로 help pwd:
pwd: pwd [-LP]
Print the name of the current working directory.
Options:
-L print the value of $PWD if it names the current working
directory
-P print the physical directory, without any symbolic links
By default, `pwd' behaves as if `-L' were specified.
반면 pwd바이너리는 getcwd(3)시스템 호출을 통해 현재 디렉토리를 가져옵니다 readlink -f /proc/self/cwd. 예를 들어, 다른 디렉토리에 대한 링크 인 디렉토리로 이동하십시오.
$ ls -l
total 4
drwxr-xr-x 2 terdon terdon 4096 Jun 4 11:22 foo
lrwxrwxrwx 1 terdon terdon 4 Jun 4 11:22 linktofoo -> foo/
$ cd linktofoo
$ echo $PWD
/home/terdon/foo/linktofoo
$ pwd
/home/terdon/foo/linktofoo
$ /bin/pwd
/home/terdon/foo/foo
그래서, GNU 시스템에 대한 결론 (우분투 등)에 pwd그리고 echo $PWD당신이 사용하지 않는 동일 -P옵션을하지만 /bin/pwd같은 다른과 동작합니다입니다 pwd -P.
기호 링크에있을 때를 포함하여 모든 작업 디렉토리에 옵션없이 옵션을 사용하면 둘 다 동일한 결과를 리턴합니다.
그러나 man pwd:
-P, --physical
avoid all symlinks
이는 pwd -P다른 디렉토리를 가리키는 심볼릭 링크에서 원래 디렉토리의 경로를 인쇄 할 때 실행하는 것을 의미 합니다.
예를 들어, 심볼릭 링크 /var/run가 /run있고 현재 /var/run/디렉토리에있는 경우
echo $PWD
돌아올 것이다 :
/var/run
와 동일합니다 pwd. 그러나 다음을 실행하면
pwd -P
돌아올 것이다
/run
따라서 필요한 경로에 따라 달라집니다. 심볼릭 링크가없는 실제 경로 또는 심볼릭 링크를 무시하는 현재 디렉토리. pwd -P와 echo $PWD기호 의 유일한 차이점 은 심볼릭 링크가있는 경우입니다.