Bash의 "cd"는 심볼릭 링크와 일관되지 않게 동작합니다.

Bash의 "cd"는 심볼릭 링크와 일관되지 않게 동작합니다.

저는 현재 cd심볼릭 링크와 관련된 Bash의 동작을 이해하려고 노력하고 있습니다. 기본적으로 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첫 번째 예에서는 Symlink 뒤에 디렉터리 경로가 없다는 것을 알아차리고 a실제 경로를 시도하여 해당 디렉터리를 찾았다 고 가정합니다 . 이 가설을 뒷받침하는 증거를 찾는 데 어려움을 겪고 있지만 다음 논리를 따를 수 있습니다.원천무슨 일이 일어나고 있는지 정확히 이해하세요(코드가 많지 않음).

관련 정보