명령의 출력을 파이프하여 로 보내는 방법이 있습니까 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
대신 두 번 인쇄합니다 . 출력이 두 번 이동 하고 프로세스가 파이프에 의해 리디렉션되므로 이 모든 출력이 실행되고 여기에서 두 번 표시됩니다.1
2
tee
stdout
tee
stdout
sed
sed
2
표준 오류와 같은 다른 파일 설명자를 사용해야 합니다 /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 및 데몬.