unix内置`pwd`命令和它的$ PWD环境变量有什么区别?

时间:2010-12-06 02:17:43

标签: linux unix pwd

就是这样。 我有一个目录电话: - %/家庭/ MYNAME /

我在该目录中做了一个软链接: - %cd / home / myname / %ln -s / home / others /。

现在,我从/ home / myname / cd进入其他人 这是有趣的部分。

当我执行unix内置pwd命令时,我得到了ORIGINAL路径名: - %/家庭/其他的/

但是当我回显$ PWD环境变量时,我得到了链接路径名: - %/家庭/ MYNAME /其他的/

为什么会这样?

2 个答案:

答案 0 :(得分:2)

/bin/pwd外部命令与内置命令之间的区别在于外部命令不知道你在那里进行了哪些cd操作,因此不会假装你当前的目录在一系列符号链接的某个地方;它为您提供了从根目录到当前目录的直接路径,就像realpath()函数那样。

请参阅set -o physical中的bash

答案 1 :(得分:2)

/var# ls -l
lrwxrwxrwx  1 root root   10 Aug 22 13:21 mail -> spool/mail
drwxr-xr-x  2 root root 4096 Jul  1 20:58 opt
drwxr-xr-x 22 root root 4096 Dec  5 17:38 run
drwxr-xr-x 12 root root 4096 Aug 22 13:21 spool
drwxrwxrwt 14 root root 4096 Dec  6 02:46 tmp
/var# cd mail
/var/mail# echo $PWD
/var/mail

/var/mail# pwd
/var/mail

/var/mail# /bin/pwd
/var/spool/mail

换句话说,使用$PWD就足够了,因为pwd可能无法为您提供更好的结果(无论如何更好)。

为什么会这样? /bin/pwd使用特定于操作系统的调用来确定当前的工作目录 - 在Linux的情况下,内核只保留已解析的目录(请参阅/proc/self/cwd),而shell的pwds包含shell认为它的内容英寸