为什么 `cd ..` 反映了符号链接遍历,而 `ls ..` 却没有?

Why does `cd ..` reflect symlink traversal, whereas `ls ..`does not?

ls ..

表示“列出上层目录的文件和目录。”

当我在符号 link 之后更改目录时,ls .. 不遵循符号 link。它只是显示 real 上层目录。

例如当目录结构如下时,

r ┬ a - b - sub@
  └ sub

(sub@是符号link到sub目录)

cd a/b/sub 之后的

ls .. 命令给出 r 目录中的文件,因为我在 r/sub。不是 b 目录的。但是 cd .. 命令将我带到 b 目录。

如何使用 ls 命令显示目录 b 中的文件?

一个目录不知道您以前用什么符号 link 访问它; .. 是指向 real 父目录的实际目录条目。但是当你使用shell命令时cd ..,bash作弊。它知道您用来到达那里的路径(在 $PWD 中),因此它只是删除最后一个组件并更改到结果目录。

您可以自己使用相同的技巧,通过使用 "${PWD%/*}" 而不是 .. 来使其他命令受益:

ls "${PWD%/*}"