为了账号安全,请及时绑定邮箱和手机立即绑定

如何管道标准,而不是标准?

如何管道标准,而不是标准?

喵喵时光机 2019-07-01 11:03:55
如何管道标准,而不是标准?我有一个程序可以把信息写到stdout和stderr我需要grep通过即将到来的斯泰尔漠视标准输出.我当然可以分两步做:command > /dev/null 2> temp.file grep 'something' temp.file但我更愿意在没有临时文件的情况下做到这一点。有什么聪明的管道技巧吗?
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

首先将stderr重定向到stdout-管道;然后将stdout重定向到/dev/null(不改变stderr的去向):

command 2>&1 >/dev/null | grep 'something'

有关I/O重定向的所有种类的详细信息,请参阅重定向在巴什参考手册中。

注意,I/O重定向的顺序是从左到右解释的,但管道是在解释I/O重定向之前设置的。文件描述符(如1和2)是对打开的文件描述的引用。手术2>&1使文件描述符2(即stderr)引用与文件描述符1(即stdout)当前引用的文件描述符相同的打开文件描述(请参见dup2()open())。手术>/dev/null然后更改文件描述符1,使其引用打开的文件描述。/dev/null,但这并不改变文件描述符2引用文件描述符1最初指向的打开文件描述的事实-即管道。


查看完整回答
反对 回复 2019-07-01
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

在Bash中,还可以使用过程替代:

command > >(stdlog pipe)  2> >(stderr pipe)

就本案而言:

command 2> >(grep 'something') >/dev/null


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 465 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信