如何让 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_1
etc 调用:
export dir_1='~/some_long_path_name/more_path_names1`
export dir_2='~/some_long_path_name/more_path_names2`
还有根据频率/新近度切换目录的工具称为 z ,我从未完全探索过。