답변:
매개 변수가되는 것을 피하기 위해 무언가 앞에 추가하려고합니다. 을 사용하여 현재 디렉토리에 액세스 할 수 있으므로을 사용 .하여 하위 폴더에 -액세스 할 수 있습니다 ./-.
cd ./-
cd -- -작동하지 않는 이유는 rm(참조 man rm)와 cd(참조 man bash또는 man cd) 를 비교할 때 다르게 구현 되었기 때문에 매개 변수 ( 또는 참조 ) 로 cd해석이 다르게 해석 -되기 때문 입니다.man bashman cd
이 답변cd 에서 읽을 수있는 셸 내장 함수라는 점도 주목해야합니다 .
cd외부 명령이 아닙니다-쉘 내장 함수입니다. 외부 명령과 달리 현재 쉘의 컨텍스트에서 실행되며 별도의 프로세스로 포크 / 실행 컨텍스트에서 실행됩니다.
외부 cd명령이 있지만 완전히 다른 작업을 수행 합니다.
이것은 Bash 와 Coreutils 가 서로 다른 두 가지 이기 때문에 구현이 다른 이유를 설명합니다 .
이것을 믿지 않을 것이라고 가정 해 봅시다. 어떻게 확인합니까? which및을 사용하십시오 type.
$ which cd && type cd
which: no cd in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.2:/usr/games/bin
cd is a shell builtin
$ which rm && type rm
/bin/rm
/bin/rm is /bin/rm
cd내장 된 것은 완전히 관련이 없습니다 . cd -- -작동하지 않는 이유 는 -옵션이 아니라 피연산자이기 때문입니다.
cd -- -이름이 지정된 디렉토리로 변경됩니다 -. FWIW.
빼기 (일명 대시)는 옵션이 아니라 피연산자 (즉, 옵션이 아닌 인수)입니다. 이 때문에 --그것을 놓는 것은 효과가 없습니다. 대시는 피연산자 cd -이지만 여전히 피연산자입니다 cd -- -. 다른 표준 유틸리티와 마찬가지로 cd피연산자가 --이전 여부와 상관없이 피연산자로 취급 합니다.
이 cd명령은 피연산자에 특별한 의미를 부여합니다 -. 다른 것은 전환 할 디렉토리입니다. cd -- -a라는 디렉토리로 전환 -a하기 때문에, -a피연산자와 같은 특수 아니다 --방지 cd옵션으로 치료에서. 이것은 -혼자서 작동하지 않으며 옵션이 아닙니다.
어쨌든 따옴표를 넣는 -것은 도움이되지 않습니다 -.
따라서 유일한 아이디어는 동일한 아이디어를 표현하는 다른 방법, 즉 동일한 디렉토리의 다른 이름을 찾는 것입니다. 다행히도 쉬운 방법이 있습니다 ./. 상대 파일 이름 앞에 추가 하면 여전히 동일한 파일을 의미합니다. 는 ./: 우리의 경우에 관련이 달라 지나요 CDPATH디렉토리 이름으로 시작하는 경우 협의되지 않은 /, ./또는 ../. 그러므로:
cd ./-
또 다른 방법 -은 디렉토리 이므로 이후 에 디렉토리를 추가하는 /것입니다. /파일 이름 끝에 a 를 추가 하면 파일이 디렉토리로 처리됩니다 (특히, 명령이 파일이 디렉토리에 대한 심볼릭 링크 인 경우 심볼릭 링크가 아닌 디렉토리 자체에서 작동 함). 차이 없음. 그러므로:
cd -- -/
글쓰기 -/는 완성 코드에 의해 제안되지만 bash에서는 실제로는 --이전 버전 에서만 작동하며 bash에는 특별한 경우가 없습니다 cd -/(zsh does).
cd -- -/만 실제로 시도 했지만 cd -그 직전에 해당하는 것을 실행했기 때문에 디렉토리가 실제로 존재하지 않았고 다른 실패한 시도로 해석했습니다.