跟随符号链接时,如何让 cd 切换到完整路径?

hol*_*web 6 shell symbolic-link

在遵循符号链接后,如何让 shell 理解完整路径。在下面的示例中,我希望第一个“pwd”命令报告“/Users/sholden/Projects/PS1/examples”,而“cd ..”命令将我带到 /Users/sholden/Projects/PS1/而不是回到我的主目录。我对在 Bourne shell 中执行此操作的设置(或者是 Korn?*)的记忆模糊,但我无法挖掘 25 年前的细节......

AirHead:~ sholden$ ls -ld examples
lrwxr-xr-x  1 sholden  staff  53 Nov 15 09:33 examples -> /Users/sholden/Projects/PS1/examples
AirHead:~ sholden$ cd examples
AirHead:examples sholden$ pwd
/Users/sholden/examples
AirHead:examples sholden$ cd ..
AirHead:~ sholden$ pwd
/Users/sholden
AirHead:~ sholden$ 
Run Code Online (Sandbox Code Playgroud)

是不是“设置了困难路径”?提前致谢。

* 两者都不是 - 当时我是csh用户。

小智 6

你应该使用cdwith-P选项来做到这一点。

来自 man pange:

 -P     Handle the operand dot-dot physically; symbolic link components shall be resolved before dot-dot components
              are processed (see step 7. in the DESCRIPTION).
Run Code Online (Sandbox Code Playgroud)

展示它是如何工作的小测试:

kent@ArchT60:/tmp$ ls -ld /opt/google/picasa/
drwxr-xr-x 3 root root 4096 Aug  5  2010 /opt/google/picasa/

kent@ArchT60:/tmp$ ln -s /opt/google/picasa/ cdLink
kent@ArchT60:/tmp$ ls -l cdLink
lrwxrwxrwx 1 kent kent 19 Nov 15 21:23 cdLink -> /opt/google/picasa/

kent@ArchT60:/tmp$ cd -P cdLink
kent@ArchT60:/opt/google/picasa$ pwd
/opt/google/picasa

kent@ArchT60:/opt/google/picasa$ cd /tmp/cdLink
kent@ArchT60:/tmp/cdLink$ 
kent@ArchT60:/tmp/cdLink$ cd -P ..
kent@ArchT60:/opt/google$ 
Run Code Online (Sandbox Code Playgroud)

我认为上面的示例显示了您正在寻找的内容。