pwd와 $ PWD의 사용 차이


9

현재 / 현재 작업 디렉토리 환경 변수 $PWD명령 을 인쇄 pwd할 수 있습니다. 그렇다면 두 가지 사용법의 차이점은 무엇입니까? 또는 특정 목적을 위해 무엇을 선택해야합니까?

답변:


10

그것은 당신이하는 일에 달려 있습니다. 우선 $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.


한 가지 차이점은 사용 가능한 경우 $ PWD를 사용하면 echo 또는 pwd와 같은 하위 명령을 분기하지 않아도된다는 것입니다. 이는 성능 및 프로그램 추적에 유리합니다.
Joe Atzberger 2018 년

3

기호 링크에있을 때를 포함하여 모든 작업 디렉토리에 옵션없이 옵션을 사용하면 둘 다 동일한 결과를 리턴합니다.

그러나 man pwd:

-P, --physical
    avoid all symlinks

이는 pwd -P다른 디렉토리를 가리키는 심볼릭 링크에서 원래 디렉토리의 경로를 인쇄 할 때 실행하는 것을 의미 합니다.

예를 들어, 심볼릭 링크 /var/run/run있고 현재 /var/run/디렉토리에있는 경우

echo $PWD

돌아올 것이다 :

/var/run

와 동일합니다 pwd. 그러나 다음을 실행하면

pwd -P

돌아올 것이다

/run

따라서 필요한 경로에 따라 달라집니다. 심볼릭 링크가없는 실제 경로 또는 심볼릭 링크를 무시하는 현재 디렉토리. pwd -Pecho $PWD기호 의 유일한 차이점 은 심볼릭 링크가있는 경우입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.