什么是$ 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)上,pwdecho $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
这并不能真正回答我的问题。现在的问题是不是真正的之间的差异$PWDpwd(已经被覆盖在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.