所以维基百科(关联)告诉我该命令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)上,pwd
和echo $PWD
是等效的,除非您使用该-P
选项,但/bin/pwd
不同,并且行为类似于pwd -P
.
答案2
$PWD
是个磷当前的名称瓦奥金D目录。
当存在符号链接时,$PWD
与执行命令相比,读取结果可能会有所不同pwd
。