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

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

명령의 출력을 파이프하여 로 보내는 방법이 있습니까 stdout?

예를 들어, fortune포춘 쿠키를 인쇄 stdout하고 다음 명령으로 파이프합니다.

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

답변1

tee항상 표준 출력에 씁니다. 표준 출력이 이미 전송된 터미널 외에 명령으로 데이터를 전송하려면 해당 명령에 대한 프로세스 대체를 사용하면 됩니다. ( 로 시작하더라도 >프로세스 대체는 표준 출력을 리디렉션하지 않으며 tee명령은 이를 인수로 처리합니다.)

fortune | tee >(pbcopy)

답변2

귀하의 가정:

fortune | tee >(?stdout?) | pbcopy

출력이 stdout에 두 번 기록 되므로 fortune출력이 pbcopy.

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

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

sum 2대신 두 번 인쇄합니다 . 출력이 두 번 이동 하고 프로세스가 파이프에 의해 리디렉션되므로 이 모든 출력이 실행되고 여기에서 두 번 표시됩니다.12teestdoutteestdoutsedsed2

표준 오류와 같은 다른 파일 설명자를 사용해야 합니다 /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

답변3

cuonglm이 다 말했어요.

당신은 시도:

fortune | tee "$(tty)" | pbcopy

tty/dev/pts/99대화형 세션(예: 터미널)에서 실제 의사 터미널(예: ) 로 확인되어야 합니다 . 또는아니 tty배치, at 및 데몬.

관련 정보