Bash 如何使用管道将stderr连接到stdin?

Bash 如何使用管道将stderr连接到stdin?,bash,pipe,Bash,Pipe,“|”管道操作符将一个进程的标准输出连接到另一个进程的标准输入。有没有办法创建一个管道,将一个进程的stderr连接到另一个进程的stdin,从而使stdout在我的终端中保持活动状态?在互联网上搜索根本没有给我任何信息 提前谢谢大家,, Michalis.如果您愿意混合使用stdoot和stderr,那么您可以首先将stderr重定向到stdout,然后使用管道: theprogram 2>&1 | otherprogram 如果你不想要stdout,你可以杀了它: thepr

“|”管道操作符将一个进程的标准输出连接到另一个进程的标准输入。有没有办法创建一个管道,将一个进程的stderr连接到另一个进程的stdin,从而使stdout在我的终端中保持活动状态?在互联网上搜索根本没有给我任何信息

提前谢谢大家,, Michalis.

如果您愿意混合使用stdoot和stderr,那么您可以首先将stderr重定向到stdout,然后使用管道:

theprogram 2>&1 | otherprogram
如果你不想要stdout,你可以杀了它:

theprogram 2>&1 1> /dev/null | otherprogram
如果确实要存储原始标准输出,则必须将其重定向到一个文件(代替
/dev/null
),或者重定向到以前使用
exec
打开的另一个文件描述符


(不幸的是,没有像
2 |
这样的直接“pipe this file descriptor”语法,这会很方便。)

您也可以交换stdout和stderr流,即。Estdout成为新的stderr,stderr成为新的stdout)


您可以使用命名管道:

mkfifo /my/pipe
error-handler </my/pipe &
do-something 2>/my/pipe
mkfifo/my/pipe
错误处理程序/my/pipe
这应该在终端中保持stdin&stdout为“do something”,并将stderr重定向到/my/pipe,由“错误处理程序”读取


(我希望这项工作没有bash需要测试)

您可以通过bash的进程替换功能获得这种效果:

somecommand 2> >(errorprocessor)

非常感谢您的回答,但事实上,我希望保留stdout并只将stderr传递给另一个进程。有没有办法做到这一点?你的意思是想把标准输出打印到控制台上?您可以轻松地将其存储在文件中。。。要将其打印回控制台,我不确定,您可能需要设置两个新的文件描述符并适当重定向。。。查看我发布的链接。是的,当然。以下是实际的命令:
exec 3>&1;过程2>&1>&3>&-|过程2>&;exec 3>&-
somecommand 2> >(errorprocessor)