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


27

因此Wikipedia(链接)告诉我该命令pwd是“打印工作目录”的缩写,这很有意义。

但是对于环境变量,“ P”必须是除了打印以外的首字母缩写。

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

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

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

因此,他们显然喜欢cwdover (更直观的缩写)pwd。

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


5
当前工作目录?
— DarioP

3
我怀疑您只是在想它。$PWD等同于`pwd`,这就足够了。
— 另一个人

1
另一个猜测:是否正在处理工作目录?
— oxfn

Answers:


23

那要看你在做什么。首先,$PWD是环境变量,pwd是内置的shell或实际的二进制文件:

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

现在,$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

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

来源 /ubuntu//a/476633/291937


1
@llua没有什么可以禁止PWD使用环境变量。实际上,对于大多数(甚至不是全部)shell,这是默认情况,将其提供给子进程是有意义的。
— jlliagre 2014年

1
我不知道为什么人们会投票否决,这似乎是一个很好的答案,并且经过了充分的解释。
— Mads Skjern 2014年

2
@MadsSkjern POSIX标准要求大多数内置函数也可以作为命令使用。这是为了允许从其他程序直接调用它们而无需启动shell。
— jlliagre 2014年

2
这并不能真正回答我的问题。现在的问题是不是真正的之间的差异$PWD和pwd(已经被覆盖在U&L I相信之前),但关于这导致命名变量“的原因PWD”。
— 约翰·史密斯

1
@Thushi你很有可能是正确的。PWD是由ksh88哪个文档引入的:PWD The present working directory set by the cd command.您应该将此添加到您的答复中。
— jlliagre 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.