내 홈 디렉터리에서 /home/regis
해당 디렉터리에 대한 심볼릭 링크를 생성하고 작업을 실행한 후 bash와 해당 자동 완성기 간에 충돌이 발생하여 충돌이 발생했습니다.LINK
DIR/SUBDIR
cd LINK
..
bash 자동 완성기의 경우 PS1을 사용할 때 나타나는 프롬프트와 마찬가지로 비밀번호가 표시되므로 사용자가 예상하는 대로 ..
이 결과가 발생합니다 ./home/regis
/home/regis/LINK
\w
Bash 자체의 경우 ..
cause DIR
및 ../..
cause 는 표시된 대로 /home/regis
실제 경로를 사용하고 있음을 의미합니다 ./home/regis/DIR/SUBDIR
pwd -P
여기서는 어떤 종류의 동작이 예상되어야 합니까? 내가 여기서 뭔가 잘못하고 있는 걸까요?
/home/regis$ 터치 파일 /home/regis$ mkdir -p DIR/SUBDIR /home/regis$ ln -s 디렉토리/하위 디렉토리 링크 /home/regis$ CD 링크 /home/regis/LINK$ ls ../FI # 여기서는 TAB을 사용한 자동 완성이 성공합니다. /home/regis/LINK$ ls ../FILE # 하지만 여기서는 자동 완성 명령이 실패합니다. ls: '../FILE'에 접근할 수 없습니다: 해당 파일이나 디렉터리가 없습니다 /home/regis/LINK$ ls ../../FILE # 명령 성공 문서 $ bash -버전 GNU bash, 버전 5.0.17(1)-릴리스(x86_64-pc-linux-gnu)
답변1
Bash 자체의
..
원인DIR
및../..
원인/home/regis
,
보통은 아니지...
/home/regis/LINK$ ls ../FILE # but autocompleted command will fail here ls: cannot access '../FILE': No such file or directory /home/regis/LINK$ ls ../../FILE # command succeeds
...하지만 이것은 Bash가 아닙니다. 이것은 ls
.
문제는 사용자 친화적이려고 노력하는 Bash가 cd
심볼릭 링크를 통과할 때 해당 위치에 도달하기 위해 택한 경로를 내부적으로 기억한다는 것입니다. 그런 다음 cd ..
예를 들어 Bash에서 해당 경로를 사용하면 cd LINK; cd ..
시작한 곳으로 돌아갈 수 있습니다.
그러나 이는 ls
외부 프로세스이므로 이에 대해 아무것도 모르고 어떤 명령을 사용하여 거기에 도달하든 /home/regis/DIR/SUBDIR
바로 여기에 있는 일부 작업 디렉터리에서만 실행되고 있는 것으로 보입니다. cd
글쎄, 실제로는 경로 이름을 운영 체제에 전달하고 운영 체제는 신경 쓰지 않고 파일 시스템의 항목 ls
과 함께 작업 디렉터리를 있는 그대로 사용합니다 ...
대신 사용 하면 쉘은 이 특별한 동작을 비활성화하고 쉘에서와 동일한 경로를 cd -P LINK
볼 수 있습니다 . /home/regis/DIR/SUBDIR
일반적으로 사람들은 심볼릭 링크가 가리키는 지점을 지나서 "위로" 이동하려고 시도하지 않는 한 대부분의 경우 잘 작동하기 때문에 신경 쓰지 않습니다.
내 이전 답변도 참조하세요. https://unix.stackexchange.com/a/739426/170373동일한 주제에 대한 "예쁜" ASCII 차트의 경우.