다운로드했습니다수업내 웹 서버로 가서 압축을 푼다.
라는 폴더가 포함되어 있습니다 -
. 나는 이 문제를 어떻게 처리해야 할지 안다고 생각했지만, 그렇지 않았습니다.
시도해 보았지만 cd -- -
원하는 효과가 없었습니다. 따옴표를 사용해도 영향을 미치지 않는 것 같습니다. 슬래시를 곳곳에 넣었지만 작동하지 않았습니다.
이 폴더를 변경하는 올바른 방법은 무엇입니까?
답변1
매개변수가 되는 것을 방지하고 싶으므로 매개변수 앞에 뭔가를 추가해 보겠습니다. 현재 디렉토리는 를 사용하여 액세스할 수 있으므로 .
하위 폴더도 을 사용하여 액세스할 수 있습니다.-
./-
cd ./-
cd -- -
작동하지 않는 이유는 비교하면 구현이 다르기 때문입니다 rm
(참조man rm
) cd
확인하다man bash
또는man cd
)은 cd
다르게 해석되어 -
매개변수로 처리됩니다(참조:man bash
또는man cd
).
cd
또한 이것은 다음에서 사용할 수 있는 쉘 내장 함수라는 점에 유의해야 합니다.이 답변:
cd
외부 명령이 아니라 쉘 내장 기능입니다. 외부 명령과 같이 분기/실행 컨텍스트에서 별도의 프로세스가 아닌 현재 셸의 컨텍스트에서 실행됩니다.
외부 명령이 있지만 cd
뭔가를 수행합니다.완전히 다른.
이는 구현이 다른 이유를 설명합니다.불다그리고핵심 도구두 가지가 다릅니다.
당신이 이것을 믿지 않는다고 가정하면, 이것을 어떻게 증명할 수 있습니까? 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
답변2
빼기 기호(대시라고도 함) 자체는 옵션이 아니라 피연산자(즉, 옵션에 대한 인수가 아님)입니다. 따라서 --
앞에 놓는 것은 아무런 효과가 없습니다. 대시는 의 피연산자 cd -
이며 에서도 피연산자로 유지됩니다 cd -- -
. 다른 표준 유틸리티와 마찬가지로 cd
피연산자는 피연산자 앞에 있거나 없는 것처럼 처리됩니다 --
.
이 cd
명령은 피연산자에 특별한 의미를 할당합니다 -
. 다른 것들은 전환될 디렉토리입니다. 피연산자로 특별하지 않고 옵션 으로 처리되지 않으므로 cd -- -a
명명된 디렉터리로 전환합니다 . 이것은 단일 경우에는 작동하지 않으며 옵션도 아닙니다.-a
-a
--
cd
-
어쨌든 피연산자는 결국 전달되므로 따옴표를 추가해도 -
도움이 되지 않습니다 .-
따라서 유일한 방법은 동일한 아이디어를 표현하는 다른 방법, 즉 동일한 디렉토리에 대한 다른 이름을 찾는 것입니다. 다행히도 쉬운 방법이 있습니다. ./
상대 파일 이름을 앞에 붙이면 여전히 동일한 파일을 의미합니다. 이는 ./
차이를 가져오며, 이는 우리의 경우에는 관련이 없습니다. 디렉토리 이름이 CDPATH
, 또는 로 시작하면 상담이 수행되지 않습니다. 그러므로:/
./
../
cd ./-
-
또 다른 방법은 디렉토리이기 때문에 뒤에 추가하는 것입니다 /
. /
파일 이름 끝에 a를 추가하면 파일이 디렉터리로 처리됩니다(특히 파일이 디렉터리에 대한 심볼릭 링크인 경우 명령은 심볼릭 링크가 아닌 디렉터리 자체에서 작동함). 차이점 . 그러므로:
cd -- -/
-/
그건 그렇고, 완성 코드는 제안된 대로 작성되었지만 bash에서는 실제로 --
이전 상황에만 적용되며 bash에는 특별한 경우가 없습니다 cd -/
(zsh는 그렇습니다).
답변3
경로를 통한 자격은 선택 사항입니다.
cd ./-
답변4
다음도 작동합니다.
cd ~/'-'
또는
cd ~/"-"