我目前正在尝试了解 Bashcd
在符号链接方面的行为。默认情况下,cd
应遵循逻辑目录结构并且不应解析符号链接。
cd
在我的第一个示例中,行为类似。然而,我想出了第二个例子,它cd
似乎遵循物理结构。这是预期的行为吗?有什么不同?
设置
$ cd
$ mkdir -p test/a/b/c test/d
$ tree test
test
├── a
│ └── b
│ └── c
└── d
4 directories, 0 files
$ cd test/d
$ ln -s ../a/b/c symlink
第一个例子
$ pwd
/home/hexcabron/test/d
$ tree ..
..
├── a
│ └── b
│ └── c
└── d
└── symlink -> ../a/b/c
5 directories, 0 files
$ cd symlink/../../a
$ pwd
/home/hexcabron/test/a
第二个例子
$ cd ../d
$ pwd
/home/hexcabron/test/d
$ mkdir -p symlink/../e
$ tree ..
..
├── a
│ └── b
│ ├── c
│ └── e
└── d
└── symlink -> ../a/b/c
6 directories, 0 files
$ cd symlink/../e
$ pwd
/home/hexcabron/test/a/b/e
答案1
好问题。假设您使用的是 bash,cd
将默认使用以下符号链接。可以使用-P
和-L
标志来覆盖此行为,cd
分别强制使用物理路径和链接路径。
我假设在您的第一个示例中,cd
注意到符号链接后面没有目录路径a
,因此它尝试了物理路径并找到了该目录。我很难找到证据来支持这个假设,但你可以遵循以下逻辑:来源确切地了解发生了什么(代码不多)。