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


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

zshmultios옵션 설정, 당신은 필요가 없습니다 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대화식 세션에서 (예 : 터미널에서) 실제 의사 터미널 ( 예 :) 을 확인 하거나 배치 및 ttytty없어야합니다 .

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