跟随符号链接后恢复“cd ..”功能

Val*_*Val 13 command-line directory symbolic-link

如果我使用以下命令在终端中创建符号链接

ln -s /path/to/some/directory symbolicLink

然后按照链接

cd symbolicLink

终端似乎认为 cwd 是~/symbolicLink/即使它实际上正在显示~/path/to/some/directory/~当然,假设链接是在 中创建的)。这意味着,如果我然后输入,cd ..我将被带回~,因为终端“认为”这是 cwd 的父级。

我需要改变什么才能cd ..把我带到~/path/to/some/,即 的真正父母~/path/to/some/directory/

小智 15

请参阅/sf/ask/731974911/

您可以使用 'cd -P' 转到“真正的”父目录。请参阅有关如何使其成为默认行为的最佳答案的第一条评论。


l0b*_*0b0 5

cd -P行为中有一个微妙的警告(由于篇幅而作为答案发布):

$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..
Run Code Online (Sandbox Code Playgroud)

pwd现在应该打印什么?从逻辑上讲,它可以是

  1. $dir1如果cd -P ..cd ..先和cd -- "$(readlink -f)"后,或
  2. /tmp如果cd -P ..cd -- "$(readlink -f)"先和cd ..之后。

实际上它是后者,这意味着pwd直观上比“父”目录高两个级别。