리눅스에서`//`경로를 나타내는 디렉토리는 무엇입니까? 현재 루트 디렉토리에 있음을 나타냅니다. 이것은

입력하여 리눅스에서 상위 디렉토리로 돌아가고 싶을 때는 cd ..오타를 썼다 cd //. 놀랍게도 오류는보고되지 않았습니다. 더 많은 프롬프트가됩니다 username@hostname://$. ls내가 현재 루트 디렉토리에 있음을 나타냅니다.

이것은 쉘의 버그입니까? 기능인 경우 //별칭은 /? 내 쉘은 GNU bash, 버전 4.1.5 (1)-릴리스 (i686-linux-gnu)입니다.

감사와 안부.



답변

어느 쪽이든 고려할 수 있습니다.

Linux에서는 //아무 의미도 없습니다 . 시작을 포함하여 경로의 어느 곳에서나 연속 된 여러 개의 슬래시가 하나로 축소됩니다 . 실행 하면 알 수 있듯이 디렉토리를 변경하여를 //넣으십시오 . 마찬가지로 으로 축소됩니다 ./readlink /proc/self/cwd/usr//local///bin/usr/local/bin

그러나 Cygwin 또는 이전 Apollo Domain / OS와 같은 다른 유닉스 계열 시스템 은 네트워크 경로에 // 접두사 를 사용합니다 (예 🙂 //fileserver/path/to/data. POSIX에서도 가능합니다.

여러 가지 이유로, bash 쉘은 OS 제공 추적 외에도 현재 디렉토리를 자체적으로 추적하며 초기 디렉토리 //가 무너지는 것을 방지하고 그러한 시스템과의 호환성을 유지 하는 코드를 가지고 있습니다. “기능”은 bash 가 현재 디렉토리를보다 직관적으로 추적 cd하는 것 입니다. 예를 들어, 심볼릭 링크에 들어가면 bash 는 커널이 다르게 생각하더라도 예상 경로를 보여줍니다. “버그”는 bash//그것을 사용하지 않는 시스템에서도 가능 하다.


답변

POSIX 경로 이름 정의에서 :

경로 이름은 선택적으로 하나 이상의 후행 슬래시를 포함 할 수 있습니다. 여러 개의 연속 슬래시는 하나의 슬래시와 동일한 것으로 간주됩니다.

출처

그리고 Pathname Resolution 4.11 장 에서 아래의 주석에서 언급 한 바와 같이 더 정확하게 :

두 개의 연속 슬래시로 시작하는 경로 이름은 구현 정의 방식으로 해석 될 수 있지만 두 개 이상의 선행 슬래시는 단일 슬래시로 취급됩니다.


답변

일종의 기능입니다. 쉘 스크립트를 사용 find하고을 사용하는 경우 예를 들어 모든 경로 앞에 ./ 접두사가 붙습니다. 그런 다음 실제 경로에 고정하면`/my/path/./appended/path가되고 / my / path / appended / path로 해석됩니다. 따라서 실수하지 않으면 // get은 /./로 해석되므로 /로 해석됩니다. / home / user //에 갔을 때 / home / user /에 들어갔을 때도 마찬가지입니다.


답변

“bug”를 표시하라는 메시지가 표시됩니다.

“/”, “//”, “//////////////////////”경로는 “/”와 같은 의미를 갖습니다. 유닉스 경로에서 원하는 곳에 많은 “/”를 추가 할 수 있지만 그 의미는 바뀌지 않습니다.

“버그”는 프롬프트에서 실제 “pwd”가 아닌 마지막 유효한 유형의 경로를 사용하여 표시한다는 사실과 관련이 있습니다.

어쨌든 재미있다;)


답변

그것의 특징이며 모든 배수는 하나의 단일 /

끝에 예제와 같은 경로가있는 변수가있는 경우 유용합니다. 따라서 CD에 오류가 발생하지 않으며 작업 공간 변수를 변경할 필요가 없습니다.

MY_WORKSPACE = / home / your_username / workspace /
MY_NEW_PROJECT = $ MY_WORKSPACE / my_proj /
cd $ MY_NEW_PROJECT

프로젝트 변수의 전체 내용은

/ home / your_username / workspace // my_proj /