답변:
매개 변수가되는 것을 피하기 위해 무언가 앞에 추가하려고합니다. 을 사용하여 현재 디렉토리에 액세스 할 수 있으므로을 사용 .
하여 하위 폴더에 -
액세스 할 수 있습니다 ./-
.
cd ./-
cd -- -
작동하지 않는 이유는 rm
(참조 man rm
)와 cd
(참조 man bash
또는 man cd
) 를 비교할 때 다르게 구현 되었기 때문에 매개 변수 ( 또는 참조 ) 로 cd
해석이 다르게 해석 -
되기 때문 입니다.man bash
man 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 -
그 직전에 해당하는 것을 실행했기 때문에 디렉토리가 실제로 존재하지 않았고 다른 실패한 시도로 해석했습니다.