什么是 $PWD?(与当前工作目录相比)

Mad*_*ern 47 terminology environment-variables

所以维基百科(链接)告诉我该命令pwd是“打印工作目录”的缩写,这是有道理的。

但是对于环境变量,“P”必须是打印以外的其他内容的首字母缩写词。

我听到人们谈论“当前工作目录”,这听起来更好,更直观,但环境变量似乎仍然被称为 $PWD,而不是 $CWD。从来没有人说“你检查了打印工作目录变量了吗?”。

我目前正在使用 web 应用程序服务器 uWSGI,运行时它告诉我(在 uWSGI 统计页面上):

"cwd":"/home/velle/greendrinks",
Run Code Online (Sandbox Code Playgroud)

所以他们显然喜欢(更直观的首字母缩写词)cwdover pwd

我想我想弄清楚是我误解了什么,还是只是给环境变量一个不直观的名字?

Thu*_*shi 38

这取决于你在做什么。首先,$PWD是一个环境变量,pwd是一个内置的 shell 或一个实际的二进制文件:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
Run Code Online (Sandbox Code Playgroud)

现在,$PWD除非您使用-P标志,否则bash 内置将简单地打印当前值。如中所述help pwd

pwd: pwd [-LP]

    打印当前工作目录的名称。

    选项:

      -L
          打印$PWD 它是否命名当前工作目录的值
      -P
          打印物理目录,没有任何符号链接

    默认情况下,'pwd' 的行为就像指定了 '-L' 一样。

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
Run Code Online (Sandbox Code Playgroud)

所以,综上所述,在GNU系统(如Ubuntu),pwd并且echo $PWD是等价的,除非你使用的-P选项,但是/bin/pwd是不同的,并且表现得像pwd -P

来源 https://askubuntu.com/a/476633/291937

  • 这并没有真正回答我的问题。问题实际上不是关于 `$PWD` 和 `pwd` 之间的区别(在我相信之前已经在 U&L 上讨论过),而是关于导致命名变量“`PWD`”的原因。 (4认同)
  • @MadsSkjern POSIX 标准要求大多数内置函数也可用作命令。这是为了允许直接从其他程序调用它们而无需启动 shell。 (3认同)
  • @Thushi“bash 内置函数将简单地打印 $PWD 的当前值”这是错误的。`pwd` **始终**打印**实际**工作目录。对环境变量进行简单的手动修改,例如“PWD=nonsense”(不更改目录)不会更改“pwd”的输出,而“echo $PWD”将输出“nonsense”。 (3认同)
  • @llua 没有禁止 `PWD` 成为环境变量。它实际上是大多数(如果不是全部)shell 的默认情况,并且将它提供给子进程是有意义的。 (2认同)
  • 我想知道为什么人们投反对票,这似乎是一个很好的答案,并进行了彻底的解释。 (2认同)
  • @JohnWHSmith 如果您因为这个完全有效的原因而投了反对票,那么您最好早点添加评论来解释原因。 (2认同)
  • @jlliagre我没有,我更喜欢投票给对方。否决票的动机仍有待发现:) (2认同)
  • @Thushi 你很可能是对的。PWD 是由 `ksh88` 引入的,它记录为: `PWD 由 cd 命令设置的当前工作目录。` 你应该将它添加到你的回复中。 (2认同)

jcb*_*rmu 22

$PWDP的当前的athname W¯¯工作会有d irectory

当有符号链接时,从读取$PWD到执行命令可能会产生不同的结果pwd

  • 见 http://unix.stackexchange.com/q/173916/88378 和 http://unix.stackexchange.com/a/79621/88378 (4认同)
  • 您能否举例说明如何获取“$PWD”和“pwd”的不同值? (2认同)