`-`는 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.