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/tcshO'Reilly优秀的书《使用csh和tcsh》,该书几乎可以用于所有未使用的内容)。
cd符号链接的默认行为。我必须记住set -o physical在我.bashrc或.bash_profile我使用的每台机器上都放进去。
cd -P仍然可以解决我面临的问题,但是仍然有用。