Unix内置`pwd`命令与$ PWD环境变量有什么区别?
题
情况就是这样。我有一个目录电话: - %/home/myname/
我在该目录中做了一个软链接: -%CD/HOME/MYNAME/%LN -S/HOME/erse//。
现在,我将CD降为其他/来自/ Home/ MyName/这是有趣的部分。
当我做一个内置的Unix pwd
命令,我得到原始路径名: - %/home/ersher/
但是,当我回应$ PWD环境变量时,我会得到链接路径名: - %/home/myname/ersher
为什么呢?
解决方案
/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
使用特定于OS的调用来确定当前的工作目录 - 如果Linux,则内核仅保留已解决的目录(请参阅 /proc/self/cwd
),而壳的PWD包含外壳所认为的。
其他提示
在 /bin/pwd
外部命令和内置的是外部命令不知道什么集 cd
操作使您到达那里,因此并不假装您的当前目录是在Symlink链条上的某个地方。它为您提供了从根到当前目录的直接路径,就像 realpath()
功能将。
看 set -o physical
在 bash
.
不隶属于 StackOverflow