명령 끝에 대시“-”는 무엇을 의미합니까?


78

다음 명령이 주어집니다 :

gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf 

뭐라고합니까 -명령의 마지막 말은? 일종의 자리 표시 자입니까?


3
언급 할 한 가지 작은 세부 사항 : -명령 끝에있을 필요 는 없습니다. 예를 들면 다음과 같습니다 ls -l | diff - /old_ls_output.txt..
manatwork

답변:


82

이 경우 '표준 입력'을 의미합니다. tar파일 인수가 필요하고 대신 stdin을 사용해야 할 때 일부 소프트웨어 (예 :)에서 사용됩니다. 쉘 구조가 아니며 사용중인 프로그램에 따라 다릅니다. 의심스러운 경우 맨 페이지를 확인하십시오!

이 경우 표준 입력은 -f옵션 의 인수 입니다. -지원되지 않는 경우 tar xvf /proc/self/fd/0또는 같은 것을 사용하여 벗어날 수 있습니다 tar xvf /dev/stdin(후자는 다양한 유니스에서 광범위하게 지원됩니다).

보편적으로 '표준 입력'을 의미하기 위해 이것에 의존하지 마십시오. 쉘에서 해석하지 않기 때문에 모든 프로그램은 원하는대로 자유롭게 처리 할 수 ​​있습니다. 어떤 경우에는 표준 출력 이거나 완전히 다른 것 su입니다. '로그인 쉘 시작'을 의미합니다. 다른 경우에는 전혀 해석되지 않습니다. Muscle memory는 -내가 어떤 프로그램의 일부 버전을 대시를 이해하지 못했기 때문에 이름이 지정된 파일을 꽤 많이 만들었습니다 .


4
STDOUT상황에 따라 의미 할 수도 있습니다 .
bahamat

3
해석하는 것은 개별 프로그램에 달려 있으므로 다른 것들은 거의 없습니다.
Alexios 2016 년

5
/dev/stdin또는 /dev/stdout당신이 정말로 입력 / 출력 스트림을 원하는 경우 사용할 수 있습니다. 스트림이므로 파일에서 탐색하려는 프로그램은 다음과 같이 파일에서 제대로 작동하지 않을 수 있습니다 -(예 : ffmpeg)
Lekensteyn

3
의 경우 bash하이픈 셸에서 해석됩니다. 참고 항목 고급 Bash 스크립팅 가이드 - 제 3 장 특수 문자 , 다음 "표준 입력이나 표준 출력에 /에서 리디렉션"텍스트 [대시] 또는 검색 할 수 있습니다. 사용 bash당신은 파일 이름을 기대 하이픈 대부분의 장소를 사용할 수 있습니다. <| > IMHO
bsd

4
나는 그것이 사실인지 확신하지 못한다. 먼저 cat처리합니다 -(맨 페이지 확인). 쉘 내장 버전 일 cat수도 있고 아닐 수도 있지만, 이는 전체 쉘이 아닙니다. 또한 쉘이 처리 -하면 echo라고 말할 수 -있으며 다른 것으로 확장 될 수 있습니다. 대신, 대시 ( /dev/stdin또는 /proc/self/fd/0아님)를 에코합니다 . 그리고 echo test > -라는 파일을 만들면 -분명히 처리하지 못합니다. 아, 그리고 당신이이 처리 말할하지 않습니다 나열된 페이지 쉘은 , 당신이 함께 사용할 수 있다고 cat하고 diff명시 적으로 대시를 이해하고 둘 다.
Alexios

13

이 경우 -Linux를 실행한다고 가정하면 실제로는 쓸모가 없습니다.

GNU tar (Linux 버전)는 기본적으로 표준 입력에서 입력을받습니다. 당신이 경우에 없는 이 동작을 원하고 명령 줄 인수로 파일 이름을 전달하려면, 당신은 플래그를 지정해야합니다 f:

tar xf filename

그래서 이것은

tar x < filename

또는 예와 같이 입력이 ipped 경우

gzip -dc filename | tar x

f여기서 플래그 를 지정하는 것은 의미가 없지만 플래그가 지정되었으므로 -표준 입력에서 읽고 자 함을 나타 내기 위해 파일 이름을 지정해야합니다 (다른 답변 참조). 반복하기 위해 이것은 중복적이고 약간 이상합니다.

또한 GNU tar가 플래그 gzip를 지정하여 자체적으로 입력을 스트리밍하도록 지시 할 수 있기 때문에 위의 행을 단순화 할 수 있습니다 z.

tar xfz filename

gzip명시 적으로 전화 할 필요가 없습니다 .


1
참고 : 모든 옵션 tar이있는 것은 아닙니다 z.
liori

2
Linux 이외의 대부분의 OS tar는 역사적 이유로 첫 번째 테이프 드라이브로 기본 설정되어 있습니다.
Gilles

1
@Gilles BSD, 그리고 OS X, .... 그러나 나는 궁금 : 몇 가지 오래 된 메인 프레임을 제외하고 어떤 다른 시스템은 여전히 (심지어 않는 메인 프레임 이외의 어떤 시스템 같은 버전의 사용 테이프 드라이브)?
Konrad Rudolph

1
@KonradRudolph 세 가지 주요 BSD는 모두 테이프 드라이브 ( /dev/sa0FreeBSD 9.0, /dev/rst0NetBSD 6.0 및 OpenBSD 5.1)로 기본 설정됩니다. AIX 7.1의 기본값은 /dev/rmt0입니다. MINIX3의 기본값은 /dev/sa0입니다. (각 경우에 최신 OS 버전을 확인했는데 "이전 메인 프레임"이 아닙니다.) Solaris는의 파일을 통해 구성 할 수 /etc있습니다. 기본적으로 테이프 드라이브로 생각합니다. GNU tar, Schilling tar, OSX 및 BusyBox는 기본적으로 stdin / stdout입니다.
Gilles

1
@Gilles- 명백한 이유로 두 번째 테이프 드라이브 tar를 기본값으로 다시 컴파일 했습니다 . :)
David Harkness 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.