情况就是这样。我有一个目录电话: - %/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 physicalbash.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top