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

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

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

但对于环境变量,“P”必须是 print 之外的其他内容的缩写。

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

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

"cwd":"/home/velle/greendrinks",

cwd所以他们显然更喜欢(更直观的缩写词)pwd

我想我想弄清楚我是否误解了某些东西,或者这只是给环境变量起了一个不直观的名称的问题?

答案1

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

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd

$PWD现在,除非您使用该标志,否则bash 内置函数将简单地打印当前值-P。正如中所解释的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

因此,总而言之,在 GNU 系统(例如 Ubuntu)上,pwdecho $PWD是等效的,除非您使用该-P选项,但/bin/pwd不同,并且行为类似于pwd -P.

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

答案2

$PWD是个当前的名称奥金D目录。

当存在符号链接时,$PWD与执行命令相比,读取结果可能会有所不同pwd

相关内容