假设我的主文件夹中有文件夹〜/ 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?
根据help cd
,
Options:
-L force symbolic links to be followed: resolve symbolic
links in DIR after processing instances of `..'
-P use the physical directory structure without following
symbolic links: resolve symbolic links in DIR before
processing instances of `..'
换句话说,-L
表示使用逻辑结构,而-P
使用实际的physical目录结构。
逻辑结构是这样,
$ tree a
a
└── b
└── symlink -> ..
转到a/b/symlink
时的实际物理结构是,
a
如果要使用real ..
,则还必须使用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 # physical location is at a/
$ cd .. # now is at a/b
$ cd symlink # goes back to a/b/symlink
$ cd -P .. # follow physical path (resolve all symlinks)
$ pwd -P # -P is optional here to show effect of cd ..
/home/sarnold
$
bash
会跟踪您当前的逻辑目录路径,如您的提示所示,并据此解释诸如cd ..
之类的内容。如果仅在cd
(或pushd
)中使用这样的路径,这会使事情更加一致,如果您随后期望命令参数(或命令内部)中的路径发生相同的事情,则会以意外的事情为代价。 emacs
和vim
具有自己的符号链接处理可配置规则,但是大多数命令都依赖内核来处理它。]