이름이 마이너스 인 디렉토리는 어떻게 입력합니까?


26

웹 서버에 임대 를 다운로드 하여 압축을 풀었 습니다.

라는 폴더가 -있습니다. 나는 그것을 다루는 방법을 알고 있다고 생각했지만, 그렇지 않습니다.

시도 cd -- -했지만 원하는 효과가 없습니다. 따옴표를 사용해도 영향을 미치지 않는 것 같습니다. 나는 사방에 슬래시를 넣었다.

이 폴더로 변경하는 올바른 방법은 무엇입니까?

답변:


34

매개 변수가되는 것을 피하기 위해 무언가 앞에 추가하려고합니다. 을 사용하여 현재 디렉토리에 액세스 할 수 있으므로을 사용 .하여 하위 폴더에 -액세스 할 수 있습니다 ./-.

cd ./-

cd -- -작동하지 않는 이유는 rm(참조 man rm)와 cd(참조 man bash또는 man cd) 를 비교할 때 다르게 구현 되었기 때문에 매개 변수 ( 또는 참조 ) 로 cd해석이 다르게 해석 -되기 때문 입니다.man bashman cd

이 답변cd 에서 읽을 수있는 셸 내장 함수라는 점도 주목해야합니다 .

cd외부 명령이 아닙니다-쉘 내장 함수입니다. 외부 명령과 달리 현재 쉘의 컨텍스트에서 실행되며 별도의 프로세스로 포크 / 실행 컨텍스트에서 실행됩니다.

외부 cd명령이 있지만 완전히 다른 작업을 수행 합니다.

이것은 BashCoreutils 가 서로 다른 두 가지 이기 때문에 구현이 다른 이유를 설명합니다 .

이것을 믿지 않을 것이라고 가정 해 봅시다. 어떻게 확인합니까? 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

참조 man which자세한 내용은, 그리고 man bashman type에 대해type


4
아니요, "-"는 모든 표준 유틸리티에서 구현되지만 옵션을 종료하기위한 것입니다. "-"만 옵션으로 인식되지 않고 이전 디렉토리로 인식됩니다.
Stéphane Chazelas

4
올바른 해결책이지만 설명이 잘못되었습니다. cd내장 된 것은 완전히 관련이 없습니다 . cd -- -작동하지 않는 이유 는 -옵션이 아니라 피연산자이기 때문입니다.
Gilles 'SO- 악마 그만해

1
Mac OS X 에서는 현재 디렉토리에 cd -- -이름이 지정된 디렉토리로 변경됩니다 -. FWIW.
팀 케네디

대부분의 의견은 내 게시물의 두 번째 부분에 반영되었습니다.
Tamara Wijsman

22

빼기 (일명 대시)는 옵션이 아니라 피연산자 (즉, 옵션이 아닌 인수)입니다. 이 때문에 --그것을 놓는 것은 효과가 없습니다. 대시는 피연산자 cd -이지만 여전히 피연산자입니다 cd -- -. 다른 표준 유틸리티와 마찬가지로 cd피연산자가 --이전 여부와 상관없이 피연산자로 취급 합니다.

cd명령은 피연산자에 특별한 의미를 부여합니다 -. 다른 것은 전환 할 디렉토리입니다. cd -- -a라는 디렉토리로 전환 -a하기 때문에, -a피연산자와 같은 특수 아니다 --방지 cd옵션으로 치료에서. 이것은 -혼자서 작동하지 않으며 옵션이 아닙니다.

어쨌든 따옴표를 넣는 -것은 도움이되지 않습니다 -.

따라서 유일한 아이디어는 동일한 아이디어를 표현하는 다른 방법, 즉 동일한 디렉토리의 다른 이름을 찾는 것입니다. 다행히도 쉬운 방법이 있습니다 ./. 상대 파일 이름 앞에 추가 하면 여전히 동일한 파일을 의미합니다. 는 ./: 우리의 경우에 관련이 달라 지나요 CDPATH디렉토리 이름으로 시작하는 경우 협의되지 않은 /, ./또는 ../. 그러므로:

cd ./-

또 다른 방법 -은 디렉토리 이므로 이후 에 디렉토리를 추가하는 /것입니다. /파일 이름 끝에 a 를 추가 하면 파일이 디렉토리로 처리됩니다 (특히, 명령이 파일이 디렉토리에 대한 심볼릭 링크 인 경우 심볼릭 링크가 아닌 디렉토리 자체에서 작동 함). 차이 없음. 그러므로:

cd -- -/

글쓰기 -/는 완성 코드에 의해 제안되지만 bash에서는 실제로는 --이전 버전 에서만 작동하며 bash에는 특별한 경우가 없습니다 cd -/(zsh does).


그것은 내 마음을 날려 버렸지 cd -- -/만 실제로 시도 했지만 cd -그 직전에 해당하는 것을 실행했기 때문에 디렉토리가 실제로 존재하지 않았고 다른 실패한 시도로 해석했습니다.
Der Hochstapler


2

이것들은 또한 작동합니다 :

cd ~/'-'

또는

cd ~/"-"

1
홈 디렉토리에서 발생하는 경우에만
RiaD

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