cd / bash在符号链接上的行为

假设我的文件夹中有〜/ a / b文件夹,文件夹b包含一个名为'symlink'的符号链接。 然后,我在bash中执行以下操作:

hm@mach:~$ cd a/b/symlink hm@mach:~/a/b/symlink$ pwd -P /home/hm/a hm@mach:~/a/b/symlink$ cd .. hm@mach:~/a/b$ pwd -P /home/hm/a/b 

pwd -P打印当前工作目录,取消所有符号链接。 为什么工作目录/ home / hm / a / b在最后,而不是/ home / hm?

Solutions Collecting From Web of "cd / bash在符号链接上的行为"

bash是“友善”的; 当你cd /into/a/symlink/ ,shell会记住旧的位置(在$OLDPWD ),并且在你想要返回到你刚才所在的目录的前提下将使用目录。

如果你想使用真正的 .. ,那么你也必须使用cd -P

  The -P option says to use the physical directory structure instead of following symbolic links (see also the -P option to the set builtin command); the -L option forces symbolic links to be followed. 
 $ cd $ cd a/b/symlink $ cd -P .. $ pwd -P /home/sarnold $ 

bash跟踪逻辑当前目录的路径,如你的提示所示,并根据这个解释cd ..等东西。 如果你只在cd (或pushd )中使用这样的路径,这会让事情变得更加一致,代价是出乎意料的事情发生,如果你期望同样的事情发生在命令参数中的路径(或者内部命令; emacsvim有他们自己的可配置的符号链接处理规则,但大多数命令依靠内核来处理它)。