`-`는 cd에만 사용됩니까?


45

cd - 현재 디렉토리와 이전 디렉토리 사이를 전환 할 수 있습니다.

-이전과 다른 -의미를 기억하지는 않지만 이전에 다른 명령에 대한 인수로 사용 된 것으로 보입니다 cd.

나는 그것이 -작동하지 않는 것을 발견했다 ls.

되어 - 에만 CD를 사용?


8
명심해야 할 cd것은 외부 명령이 아니라 내장 되어 있다는 것입니다. cd -따라서 쉘 레벨 기능입니다.
— 푹신한

6
나는 항상 git checkout -이전 지점으로 전환하기 위해 사용합니다
— wim

@fluffy : -다른 내장과 같은 방식으로 사용됩니까?
— Tim

와 같은 디렉토리 처리 내장의 일부에 대해서는 pushd그렇습니다. 그렇지 않으면 "이전 디렉토리"의 의미는 아주 유용한 기본값이 아닙니다.
— 푹신한

1
아마도 bash의 '~-'기능을 생각하고있을 것입니다 ($ OLDPWD로 해석 됨). 그것은 당신이 묘사하는 방식으로 'ls'와 함께 사용될 수 있습니다.
— abonet

답변:


22

POSIX 유틸리티 구문 가이드 라인 (구체적 # 13)는 파일명으로부터 판독 예상 유틸리티의 그 지정 -, 표준 입력 수단에 기록하기위한 파일명을 예상 유틸리티위한 -수단 표준 출력. 예를 들어, cat somefile -내용을 somefile표준 출력에 복사 한 다음 표준 입력에서 읽은 내용을 복사합니다 .

이 지침은 cd파일을 읽거나 쓰지 않기 때문에 명령에 적용 되지 않습니다. cd인수 -는“이전 디렉토리”를 의미합니다. 명령 cd -은와 동일합니다 cd "$OLDPWD" && pwd. 이 동작은 해당 cd명령과 관련이 있으며 직접 영감을받은 명령과 같은 명령 pushd입니다.

참고 -피연산자가 아닌 옵션입니다. 단지 시작 또는 옵션 -이 아닌 인수 만 있습니다. 피연산자가된다는 주된 의미 는 특별한 의미에 영향을 미치지 않습니다. 예를 들어, 이라는 하위 디렉토리로 변경하지만와 동일 하지만 이라는 디렉토리 로 변경되지 않습니다 . 마찬가지로, 호출 된 파일이 아니라 표준 입력에서 읽습니다 .-----cd -- -P-Pcd -- -cd --cat -- --


46

-POSIX 유틸리티 구문 지침 에 표준 입력으로 정의되어 있습니다 .

Guideline 13:
For utilities that use operands to represent files to be opened for either 
reading or writing, the '-' operand should be used to mean only standard input 
(or standard output when it is clear from context that an output file is being 
specified) or a file named -.

읽기 또는 쓰기 용 파일로 작동하는 유틸리티에 대한이 정의를 볼 수 있습니다. cd이 유틸리티에 속하지 않으므로 -cd에서는이 지침을 따르지 않습니다.

게다가 POSIX는 cd- 와 함께 고유 한 의미를 갖습니다 .

-
    When a <hyphen> is used as the operand, this shall be equivalent to the 
    command:

    cd "$OLDPWD" && pwd

    which changes to the previous working directory and then writes its name.

36

cd -은 약칭으로 cd "$OLDPWD" && pwd, $OLDPWD디렉토리를 방금 디렉토리로 변경할 때마다 설정됩니다.

취급은 -응용 프로그램 에 따라 다릅니다. 일부 응용 프로그램은 사용 -나타 내기 위해 STDIN, 예를 들면 grep,awk

다른 응용 프로그램을 사용할 수 -와 마이클의 대답 지정하는 등 자신이 선택한 무엇을위한 속기로 su, -속기가있다--login


그렇습니다. 실제로 그 규칙은 없습니다.
— Kiwy

2
@ Kiwy : POSIX에는 그에 대한 규칙이 있습니다. 내 대답을 참조하십시오.
— cuonglm

정확하게 말하면 일반적인 규칙이 있지만 많은 예외가 있습니다. 규칙 이전의 많은 명령이나 규칙을 준수하도록 업데이트되지 않은 이전 구현도 있습니다.
— Barmar

19

마이클이 있음을 언급하고 있지만 su다른 응용 프로그램을 사용할 수 있으며, -그들이 원하는대로 의미로, (표준 입력은 일반적인 읽기) 힘내 사용합니까 -방법과 유사한 방식으로 cd수행 지점을 변경.

$ git status
On branch master

$ git checkout foobar
$ git status
On branch foobar

$ git checkout -
$ git status
On branch master

18

모든 프로그램 -은 원하는 것을 의미하기 위해 인수로 사용할 수 있습니다 . 하나의 일반적인 예는의 약자로 su사용 -됩니다 --login. 내가 생각할 수있는 유일한 규칙은 파일에서 읽은 프로그램이 "stdin에서 읽은"- 을 의미 하기 위해 자주 사용 하지만, 전적으로 프로그램에 달려 있다는 것입니다


특수 기호를 인수로 사용하기위한 표준 또는 비표준 규칙이 있습니까?
— Tim

2

여기에 내 두 센트를 추가합니다. 여러 사람들이 이전에 제안한 것처럼 '-'를 사용하여 ps2pdf 도구가 표준 입력에서 읽도록 지시합니다.

man -t ls | ps2pdf - ls.pdf

위의 하나의 라이너 는 현재 디렉토리 에 ls 에 대한 pdf 버전의 매뉴얼 페이지를 작성합니다 .
누군가가 유용하다고 생각하기를 바랍니다 :).


2

응답으로 gnouc , -자체 의미가있다 cd.

그러나를 -사용하여 다른 프로그램 의 동작을 복제 할 수 있습니다 ~-. 예를 들면 다음과 같습니다.

cd /etc
cd /
ls ~-             #lists the contents of the /etc directory
vim ~-/fstab      #opens the file /etc/fstab in vim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.