我想知道是否有一种方法可以将命令的输出传递给标准输出。因此,例如,fortune
打印一个幸运饼干,并将其复制到剪贴板:
$ fortune | tee >(?stdout?) | pbcopy
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)
您的假设:
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
。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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句