Answers:
您的假设:
fortune | tee >(?stdout?) | pbcopy
将不起作用,因为fortune
输出将两次写入标准输出,因此您将输出倍增至pbcopy
。
在OSX(和其他系统支持/dev/std{out,err,in}
)中,您可以检查它:
$ echo 1 | tee /dev/stdout | sed 's/1/2/'
2
2
输出2
两次,而不是1
和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
tee $(tty)
或者,您知道tee /dev/tty
tee
始终写入其标准输出。如果您想将数据发送到除了标准输出已在其中的终端之外的其他命令,只需对该命令使用进程替换即可。(请注意,尽管以开头>
,但进程替换不会重定向标准输出,该tee
命令将其视为参数。)
fortune | tee >(pbcopy)
fortune | tee $(tty) | pbcopy
办?