저는 현재 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
실제 경로를 시도하여 해당 디렉터리를 찾았다 고 가정합니다 . 이 가설을 뒷받침하는 증거를 찾는 데 어려움을 겪고 있지만 다음 논리를 따를 수 있습니다.원천무슨 일이 일어나고 있는지 정확히 이해하세요(코드가 많지 않음).