입력하여 리눅스에서 상위 디렉토리로 돌아가고 싶을 때는 cd ..
오타를 썼다 cd //
. 놀랍게도 오류는보고되지 않았습니다. 더 많은 프롬프트가됩니다 username@hostname://$
. ls
내가 현재 루트 디렉토리에 있음을 나타냅니다.
이것은 쉘의 버그입니까? 기능인 경우 //
별칭은 /
? 내 쉘은 GNU bash, 버전 4.1.5 (1)-릴리스 (i686-linux-gnu)입니다.
감사와 안부.
입력하여 리눅스에서 상위 디렉토리로 돌아가고 싶을 때는 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 가 //
그것을 사용하지 않는 시스템에서도 가능 하다.
zsh
허용 cd //
하지만 /
프롬프트 문자열에 표시 할만 큼 똑똑 합니다.
POSIX 경로 이름 정의에서 :
경로 이름은 선택적으로 하나 이상의 후행 슬래시를 포함 할 수 있습니다. 여러 개의 연속 슬래시는 하나의 슬래시와 동일한 것으로 간주됩니다.
그리고 Pathname Resolution 4.11 장 에서 아래의 주석에서 언급 한 바와 같이 더 정확하게 :
두 개의 연속 슬래시로 시작하는 경로 이름은 구현 정의 방식으로 해석 될 수 있지만 두 개 이상의 선행 슬래시는 단일 슬래시로 취급됩니다.
"bug"를 표시하라는 메시지가 표시됩니다.
"/", "//", "//////////////////////"경로는 "/"와 같은 의미를 갖습니다. 유닉스 경로에서 원하는 곳에 많은 "/"를 추가 할 수 있지만 그 의미는 바뀌지 않습니다.
"버그"는 프롬프트에서 실제 "pwd"가 아닌 마지막 유효한 유형의 경로를 사용하여 표시한다는 사실과 관련이 있습니다.
어쨌든 재미있다;)
//
프롬프트에서는 프롬프트 환경 변수 ( $PS1
) 의 부작용입니다. 어떻게 PS1
정의됩니까?
$PS1
변수는로 정의됩니다 [\u@\h \W]\$
. 설정에 문제가 있습니까?
/
하면 pwd = 일 때 하나만 얻습니다 /
. 디렉토리를 얻기 위해 추가 작업을하고 있는지 궁금합니다. 되어 $PROMPT_COMMAND
설정?
echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#HOME/~}"; echo -ne "\007"
. 좀 더 자세히 설명해 주시겠습니까? 이 두 변수에 익숙하지 않습니다. 감사.