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

时间:2012-05-04 22:12:56

标签: linux bash filesystems symlink

假设我的主文件夹中有〜/ a / b文件夹,文件夹b包含 指向'.​​.'的符号链接,名为'symlink'。然后我执行以下操作 击:

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?

2 个答案:

答案 0 :(得分:26)

bash正在“友好”;当您cd /into/a/symlink/时,shell会记住旧位置(位于$OLDPWD中)并且在cd ..假设您要返回时{em> 目录你刚刚进入的目录。

如果您想使用真实 ..,那么您还必须使用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
$ 

答案 1 :(得分:5)

bash跟踪逻辑当前目录路径,如提示中所示,并根据此解释cd ..之类的内容。如果你只在cd(或pushd)中使用这样的路径,这会使事情变得更加一致,如果你因为期望命令参数中的路径发生同样的事情而以意外事情发生为代价(或者在命令内部; emacsvim有自己的符号链接处理可配置规则,但大多数命令依赖于内核来处理它。)