리눅스에서`//`경로를 나타내는 디렉토리는 무엇입니까?


13

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

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

감사와 안부.


답변:


30

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

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//그것을 사용하지 않는 시스템에서도 가능 하다.


흥미롭게도 zsh허용 cd //하지만 /프롬프트 문자열에 표시 할만 큼 똑똑 합니다.
new123456

@BinaryZebra Bitsavers에는 Apollo를 포함하여 오래된 유닉스 매뉴얼이 있습니다. 여기에는 많은 예제가 있어야합니다. TUHS 웹 사이트에도 무언가가 있어야합니다.
user1686

많은 감사, Bitsavers 매뉴얼에서 //에 대한 설명을 찾았습니다.

9

POSIX 경로 이름 정의에서 :

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

출처

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

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


1
더 적절한 섹션입니다 4.11 경로 이름 해상도 문제의 행동 만이 나타납니다 때문에, (마지막 단락)을 선도 슬래시.
user1686

3

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


1

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

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

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

어쨌든 재미있다;)


동의- //프롬프트에서는 프롬프트 환경 변수 ( $PS1) 의 부작용입니다. 어떻게 PS1정의됩니까?
더그 해리스

@DougHarris $PS1변수는로 정의됩니다 [\u@\h \W]\$. 설정에 문제가 있습니까?
Summer_More_More_Tea

이상한. PS1을 시도 /하면 pwd = 일 때 하나만 얻습니다 /. 디렉토리를 얻기 위해 추가 작업을하고 있는지 궁금합니다. 되어 $PROMPT_COMMAND설정?
더그 해리스

@DougHarris 예,이 변수는 값이로 설정됩니다 echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#HOME/~}"; echo -ne "\007". 좀 더 자세히 설명해 주시겠습니까? 이 두 변수에 익숙하지 않습니다. 감사.
Summer_More_More_Tea

bash는 man 페이지를 읽고 검색 PS1PROMPT_COMMAND사용 - man bash명령 줄에서 또는 온라인으로 읽기
더그 해리스

1

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

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

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

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

/ home / your_username / workspace // my_proj /

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.