猿问

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

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

我有一个程序可以把信息写到stdoutstderr我需要grep通过即将到来的斯泰尔漠视标准输出.

我当然可以分两步做:

command > /dev/null 2> temp.file
grep 'something' temp.file

但我更愿意在没有临时文件的情况下做到这一点。有什么聪明的管道技巧吗?


喵喵时光机
浏览 466回答 3
3回答

呼啦一阵风

首先将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最初指向的打开文件描述的事实-即管道。

繁星点点滴滴

在Bash中,还可以使用过程替代:command > >(stdlog pipe)  2> >(stderr pipe)就本案而言:command 2> >(grep 'something') >/dev/null
随时随地看视频慕课网APP

相关分类

Python
我要回答