bash - 仅对命令发球,而不是标准输出
问题描述
我已经知道如何使用tee
进程替换将输出发送到各种命令和标准输出,例如
command0 | tee >(command1) >(command2)
对于上面的行,stdout 将由来自command0
、command1
和的交错行组成command2
。
有没有办法阻止 tee 写入标准输出,而不删除它管道到的任何命令的输出?因此,对于上面的示例,stdout 仅具有来自command1
and的输出command2
?大多数与tee
没有标准输出的 ing 相关的答案只是直接写入文件,并建议使用如下内容:
command0 | tee file1 file2 >/dev/null
但是使用进程替换,这也会消耗其他命令的所有输出。
command0 | tee >(command1) >(command2) >/dev/null
有没有办法告诉tee
不要打印到标准输出,或者只直接使用输出tee
?
解决方案
尝试这个:
( command0 | tee >(command1 1>&3 ) | command2 ) 3>&1
它将 command1 的标准输出重定向到管道 3,因此 command2 只能看到原始源。最后,您再次将管道 3 重定向到标准输出。
使用它来测试它:
( echo test | tee >( sed 's/^/1 /' >&3 ) | sed 's/^/2 /' ) 3>&1
输出是无序的,在我的例子中:
2 test
1 test
推荐阅读
- openssl - 在 .NET Core 中使用 ECDSA384 进行 JWT 签名验证(MacOS 兼容性问题)
- amazon-web-services - s3 存储桶仅对某些对象的公共访问
- python - Django Channels 错误:您不能在与异步事件循环相同的线程中使用 AsyncToSync
- javascript - 云函数被执行多次,即使它在客户端被调用一次
- python - 错误:无法卸载“wrapt”。安装tensorflow-gpu时~=1.14
- python - 为什么我不能导入 re 模块?
- python - Python smtplib 电子邮件即使没有错误也不会发送
- spring-mvc - Tomcat [9.0.26] - SSLHandshake 异常
- python - 将 Python 列表转换为 JSON 文档
- python - 从大型文本文件创建多个数据框