直接输出到管道和标准输出

用户名

我想知道是否有一种方法可以将命令的输出传递给标准输出。因此,例如,fortune打印一个幸运饼干,并将其复制到剪贴板:

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

您的假设:

fortune | tee >(?stdout?) | pbcopy

将不起作用,因为fortune输出将被两次写入标准输出,因此您会将输出加倍到pbcopy

在OSX(和其他系统支持/dev/std{out,err,in})中,您可以检查它:

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

输出2两次,而不是12tee输出两次到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

使用zshmultios选项设置,您根本不需要tee

$ echo 1 >/dev/stderr | sed 's/1/2/'
1
2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章