linux - 프로그램 - 어떻게 표준 파일을 gzip으로 표준 출력 할 수 있습니까?




윈도우 gz 압축풀기 (3)

커맨드를 실행하고, 그 커맨드의 출력을 즉시 gzip으로하고, 그 커맨드의 출력을 에코 / 티 (tee out)하고 싶습니다.

즉, 다음과 같은 :

echo "hey hey, we're the monkees" | gzip --stdout > my_log.gz

라인이 실행될 때를 제외하고, 나는 이것을 표준 출력으로보고 싶다 :

hey hey, we're the monkees

한잔주세요!

tee 명령은 표준 입력을 표준 출력에 복사하고 인수로 주어진 파일에도 복사합니다. 파이프를 통해 일부 데이터를 보낼뿐만 아니라 복사본을 저장하려는 경우에도 유용합니다.

나는 천천히 오후를 보내고 있으며, 여기에 영광스럽게 묘사 된 아스키 예술 작품이 있습니다.

           +-----+                   +---+                  +-----+  
stdin ->   |cmd 1|    -> stdout ->   |tee|   ->  stdout  -> |cmd 2|
           +-----+                   +---+                  +-----+
                                       |
                                       v
                                     file

그레이 페이드가 또 다른 대답으로 보여 주듯이 '파일'은 일반 파일 일 필요는 없지만 FIFO를 사용하여 그 출력을 세 번째 명령으로 파이프 할 수 있습니다.

           +-----+                   +---+                  +-----+  
stdin ->   |cmd 1|    -> stdout ->   |tee|   ->  stdout  -> |cmd 2|
           +-----+                   +---+                  +-----+
                                       |
                                       v
                                     FIFO
                                       |
                                       v
                                    +-----+
                                    |cmd 3|
                                    +-----+

디스크를 만지는 것을 포함하지 않는 방법을 게시하기 만하면됩니다.

echo "hey hey, we're the monkees" | (exec 1>&3 && tee /proc/self/fd/3 | gzip --stdout > my_log.gz)

또 다른 방법은 ( bashzsh 와 같은 쉘을 가정 할 때) :

echo "hey hey, we're the monkees" | tee >(gzip --stdout > my_log.gz)

일반적으로 strange >() 구문은 기본적으로 다음을 수행합니다.

  • 새 FIFO 만들기 (대개 /tmp/ )
  • inside () 명령을 실행하고 FIFO를 해당 하위 명령의 stdin에 바인드합니다.
  • FIFO 파일 이름을 명령 행으로 리턴하십시오.

tee 끝나는 것을 보는 것은 다음과 같습니다.

tee /tmp/arjhaiX4

모든 gzip 은 표준 입력입니다.

Bash는 자세한 내용은 man bash 를 참조하십시오. 리디렉션 섹션에 있습니다. Zsh의 경우, "프로세스 대체"라는 제목으로 man zshexpn 참조하십시오.

내가 말할 수있는 한, Korn 쉘, 클래식 Bourne 쉘의 변형 (애쉬 및 대쉬 포함) 및 C 쉘은이 구문을 지원하지 않습니다.





tee