파이프 및 표준 출력으로 직접 출력


14

명령의 출력을 파이프하여 stdout으로 전달하는 방법이 있는지 궁금합니다. 예를 들어 fortune포춘 쿠키를 인쇄하고 클립 보드에 복사합니다.

$ fortune | tee >(?stdout?) | pbcopy 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)

OSX가 없습니다. fortune | tee $(tty) | pbcopy어떻습니까?
— Archemar

답변:


9

당신의 가정 :

fortune | tee >(?stdout?) | pbcopy

fortune출력이 표준 출력으로 두 번 작성 되므로 출력이 두 배가 되므로 작동하지 않습니다 pbcopy.

OSX (및 기타 시스템 지원 /dev/std{out,err,in})에서는 다음을 확인할 수 있습니다.

$ echo 1 | tee /dev/stdout | sed 's/1/2/'
2
2

및 2대신 두 번 출력합니다 .12

다음과 같은 표준 오류와 같은 다른 파일 설명자를 사용해야합니다 /dev/stderr.

$ echo 1 | tee /dev/stderr | sed 's/1/2/'
1
2

또는 tty연결된 의사 터미널을 얻는 데 사용 하십시오.

$ echo 1 | tee "$(tty)" | sed 's/1/2/'
1
2

로 zsh와 multios옵션 설정, 당신은 필요가 없습니다 tee전혀 :

$ echo 1 >/dev/stderr | sed 's/1/2/'
1
2

tee $(tty)또는, 알다시피tee /dev/tty
— Kenster

훌륭한 설명, 최고의 SO는 모든 주위에 대답합니다.
— 멀린

11

tee항상 표준 출력에 씁니다. 표준 출력이 이미 진행중인 터미널 외에 명령으로 데이터를 보내려면 해당 명령으로 프로세스 대체를 사용하십시오. (로 시작 >하더라도 프로세스 대체는 표준 출력을 재지 정하지 않으며 tee명령은이를 매개 변수로 간주합니다.)

fortune | tee >(pbcopy)

이것은 또한 좋은 해결책입니다.
— 멀린

0

cuonglm이 모든 것을 말했습니다.

단지 시도:

fortune | tee "$(tty)" | pbcopy

tty/dev/pts/99대화식 세션에서 (예 : 터미널에서) 실제 의사 터미널 ( 예 :) 을 확인 하거나 배치 및 tty 및 tty 가 없어야합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.