gpt4 book ai didi

bash - 我如何通过管道传输 stderr 而不是 stdout?

转载 作者:行者123 更新时间:2023-11-29 08:36:46 25 4
gpt4 key购买 nike

我有一个将信息写入stdoutstderr 的程序,我需要用grep 处理stderr code>,将 stdout 放在一边。

使用临时文件,可以分两步完成:

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

但是如果没有临时文件,如何使用一个命令和管道实现这一点呢?

最佳答案

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

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

有关各种 I/O 重定向的详细信息,请参阅关于 Redirections 的章节在 Bash 引用手册中。

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

关于bash - 我如何通过管道传输 stderr 而不是 stdout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2342826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com