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

lio*_*319 7 unix linux pwd

案例如下。我有一个目录调用:- %/home/myname/

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

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

当我执行 unix 内置pwd命令时,我得到原始路径名:- %/home/others/

但是当我回显 $PWD 环境变量时,我得到链接路径名称:- %/home/myname/others/

为什么会这样?

use*_*515 3

/var# ls -l
lrwxrwxrwx 1 root root 10 Aug 22 13:21 邮件 -> 假脱机/邮件
drwxr-xr-x 2 root root 4096 七月 1 20:58 选择
drwxr-xr-x 22 root root 4096 12月5日 17:38 运行
drwxr-xr-x 12 root root 4096 八月 22 13:21 假脱机
drwxrwxrwt 14 根 根 4096 十二月 6 02:46 tmp
/var# cd 邮件
/var/mail# 回显 $PWD
/var/邮件

/var/mail# 密码
/var/邮件

/var/mail# /bin/pwd
/var/spool/邮件

换句话说,使用$PWD就足够了,因为pwd无论如何可能不会给你更好的结果(对于更好的任何定义)。

这是为什么呢?/bin/pwd使用特定于操作系统的调用来确定当前工作目录 - 对于 Linux,内核仅保留已解析的目录(请参阅 参考资料/proc/self/cwd),而 shell 的 pwds 包含 shell 认为它所在的目录。