就是这样。 我有一个目录电话: - %/家庭/ MYNAME /
我在该目录中做了一个软链接: - %cd / home / myname / %ln -s / home / others /。
现在,我从/ home / myname / cd进入其他人 这是有趣的部分。
当我执行unix内置pwd
命令时,我得到了ORIGINAL路径名: -
%/家庭/其他的/
但是当我回显$ PWD环境变量时,我得到了链接路径名: - %/家庭/ MYNAME /其他的/
为什么会这样?
答案 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认为它的内容英寸