Answers:
参见/programming/10456784/behavior-of-cd-bash-on-symbolic-links。
您可以使用“ cd -P”转到“真实”父目录。请参阅有关如何使其成为默认行为的最佳答案的第一条评论。
cd -P
行为上有一个细微的警告(由于篇幅过长而发布为答案):
$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..
pwd
现在应该打印什么?从逻辑上讲,它可以是
$dir1
如果cd -P ..
不cd ..
先和cd -- "$(readlink -f)"
后,或/tmp
如果cd -P ..
不cd -- "$(readlink -f)"
先和cd ..
之后。实际上,它做到了后者,这意味着从pwd
直觉上讲比“父”目录高两个级别。
我感到您很痛苦- bash
由于这种行为,我认为基本上无法互动使用。
tcsh
是用于交互使用的更加用户友好的外壳。离开bash
编程(如果你坚持编写shell脚本的时候有很多的脚本语言中更好的替代品)。
要为任何用户更改外壳,请chsh
在命令行中键入并按照提示进行操作(同样,我建议您阅读/bin/tcsh
O'Reilly优秀的书《使用csh和tcsh》,该书几乎可以用于所有未使用的内容)。
cd
符号链接的默认行为。我必须记住set -o physical
在我.bashrc
或.bash_profile
我使用的每台机器上都放进去。
cd -P
仍然可以解决我面临的问题,但是仍然有用。