如何在bash脚本中分叉/管道标准输入?

谢谢

我有一个想要运行的脚本

$ myscript < mydata.dat

在内部,myscript我需要将STDIN分叉/管道到多个目的地

#!/usr/bin/env bash

php script1.php > out1
php script2.php > out2
php script3.php > out3

每个人都需要一份STDIN。可能吗?

就像是

# obviously this is broken ...
STDIN | php script1.php > out1
STDIN | php script2.php > out2
STDIN | php script3.php > out3
约翰1024

要将stdin复制到多个进程,请使用tee进程替换

tee >(script1 > out1) >(script2 >out2) ... | lastscript >outlast

该构造>(...)称为过程替换它创建一个tee可以写入的类似文件的对象将执行括号内的命令,并且对其进行的任何tee写操作都会以stdin的形式提供给该命令。

bash,ksh和zsh支持进程替换它不是POSIX,在破折号下将不起作用。

简单的例子

让我们考虑这个简单的脚本:

$ cat myscript 
#!/bin/bash
tee >(grep 1 >out1) >(grep 2 >out2) | grep 3 >out3

我们可以运行它并验证结果:

$ seq 10 | bash myscript
$ cat out1
1
10
$ cat out2
2
$ cat out3
3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Groovy脚本中从Bash Heredoc读取标准输入

bash脚本如何从管道中写入其标准输出?

如何从getopts在bash脚本中输出管道标准输出?

如何在bash脚本中将标准输入(stdin)复制到多个子流程?

如何在bash脚本中多次使用带有“-”(破折号)的标准输入?

管道如何影响标准输入?

如何在Eclipse CDT应用程序中分配输入文件而不是标准输入?

在Bash管道中读取标准输入

如何在蛇形管道中运行 bash 脚本

Bash shell 脚本,如何在命令中使用管道

如何在bash脚本中配置和允许管道?

如何在管道之间删除bash脚本中的权限?

在bash中,使用标准输入执行脚本时,如何自动输入值?

Azure管道如何在脚本等待用户输入时检测管道何时停止

在脚本中,检查标准输入是否来自文件或管道

如何在使用-字符的命令中使用管道和标准输入

在 bash 脚本中重定向标准输入和标准输出

如何在Python脚本中接受管道输入,然后接受用户提示的输入?

如何通过管道将文本输入标准输入

如何在bash shell脚本中将多行输入读入数组

如何在Bash脚本中读取多行输入?

如何在shell脚本中分配变量

如何在Python中分割输入参数

如果标准输入为空,如何打破管道?

如何评估 bash 脚本中管道的结果

如何在 PowerShell 中从管道中分块项目?

如何在Bash中分割URL参数

在bash脚本中动态重定向标准输入

来自管道和wc -m的bash脚本输入