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

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

如何让 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$ 

是“设置硬路径吗?” 提前致谢。

* 两者都不是——csh当时我只是一名用户。

答案1

您应该使用cd选项-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).

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

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$ 

我认为上面的例子表明了您正在寻找的内容。

答案2

我从来没有找到用符号链接来实现这一点的方法,但如果你的目标是在 shell 中快速切换目录,我写了一个最近在博客上发布了关于实现这一目标的几种替代方案

简短的回答是使用别名将类似以下内容添加到您的~/.bashrc

alias sf='cd ~/SmileForward/smileforward-backend/sfsite/smileforward'

或者将所有常用目录作为变量导出到您的中~/.bashrc,然后直接用cd $dir_1etc 调用:

export dir_1='~/some_long_path_name/more_path_names1`
export dir_2='~/some_long_path_name/more_path_names2`

还有根据频率/新近度切换目录的工具称为 z ,我从未完全探索过。

相关内容