Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 括号内带有while循环的管道_Bash_Redirect_While Loop_Pipe - Fatal编程技术网

Bash 括号内带有while循环的管道

Bash 括号内带有while循环的管道,bash,redirect,while-loop,pipe,Bash,Redirect,While Loop,Pipe,我将询问一个关于管道的结构,该管道在括号内带有while循环 假设我有这样一个脚本: #!/bin/bash <FirstCommand> | (while read var1; do out=`echo $var1 | <command>` \ <sth with $out> done; awk -v RS="" '{print $5,$18,$20}' OtherFile | awk 'NF==3{print}{}'

我将询问一个关于管道的结构,该管道在括号内带有while循环

假设我有这样一个脚本:

#!/bin/bash

<FirstCommand> | (while read var1; do out=`echo $var1 | <command>` \
                  <sth with $out> done; awk -v RS="" '{print $5,$18,$20}' OtherFile |  awk 'NF==3{print}{}' | awk '{gsub (/<blank>/,""); print}' > file.txt \
                  while read var2 var3 var4; do <sth> done < file.txt)
#/bin/bash
|(读var1时;执行=`echo$var1 | `\
完成;awk-v RS=“{print$5,$18,$20}”OtherFile | awk'NF==3{print}{}{}{}}awk'{gsub(/,“”);print}'>file.txt\
读取var2 var3 var4;do done
关键是我的脚本在第一个循环结束之前一直正常工作。但是第二个有一个问题

我的问题:

我的
FirstCommand
的输出是否同时重定向到两个while循环

关于
FirstCommand

这是一个生成一些文本的命令,我想将它的输出重定向到while循环运行时

更新

的输出附加到
awk
正在使用的
OtheFile


谢谢

第一个命令的输出被发送到包含两个循环的shell的输入。第一个循环消耗所有数据。第二个循环的输入是file.txt文件(awk的输出)。除非这里没有显示某些原因,否则您最好将awk直接通过管道传输到第二个while循环。

尝试类似的方法

<FirstCommand> | tee FirstCommand.output | (while read var1; do out=`echo $var1 |<command>` <sth with $out> done; awk -v RS="" '{print $5,$18,$20}' $NmapOut | awk 'NF==3{print}{}' | awk '{gsub (/<blank>/,""); print}' > file.txt; cat FirstCommand.output | while read var2; do <sth> done < file.txt)
| tee FirstCommand.output |(读var1时;do out=`echo$var1 | `done;awk-v RS=“”{print$5,$18,$20}'$NmapOut | awk'NF==3{print}{}{awk'{gsub(/,“”);print}>file.txt;cat FirstCommand.output |读var2时;do done

其中
FirstCommand.output
是一个临时文件,将包含

的输出。好的,谢谢。。。我怎样才能改变这个结构,并告诉你如何将输出同时重定向到两个while循环?如果我把AWK的输出发送到第二个循环,问题就消失了?如果威廉是正确的,那么你可以考虑使用<代码> TE/<代码>命令将FixScript命令的输出写入某个临时文件,然后,
cat
temp文件进入第二个while循环。@difley您能告诉我更改脚本的意思吗?谢谢您是否希望FirstCommand编写的每一行都是两个循环?循环是同时运行,还是一个接一个地运行?我希望循环同时运行,是的。我希望FirstCommand的输出是两个循环。谢谢,awk从哪里获得信息?awk将永远看不到FirstCommand生成的任何文本,但当它尝试读取其stdin时将立即终止,因为第一个while循环已消耗了所有数据。我将awk命令放在@William purselle您是否试图让第二个while循环先读取awk的输出,然后是FirstCommand的输出?我想在FirstCommand运行时看到awk的输出,然后在awk生成到file.txt的输出时,
while循环
do stuff那么您想让FirstCommand的输出转到第一个while循环和awk,让awk的输出转到第二个while循环?然后:
firstcommand | while。。。;做完成和第一个命令| awk |同时。。。做完成
。如果firstcommand很昂贵,请先运行它并将其输出存储在文件中。谢谢,语法是否正确。斜杠不应该出现。已从代码中删除。请注意,
OtherFile
的所有输出。因此,我认为您应该将其更改为:|(读var1时;do out=
echo$var1 |
done;awk-v RS=“”{print$5,$18,$20}OtherFile | awk'NF==3{print}{}{awk'{gsub(/,”);print}>file.txt;cat OtherFile |读var2时;dofile.txt有时不会被创建(我的意思是当它需要很长时间的时候),所以你认为
cat OtherFile
会有帮助吗?如果你不能让我的建议起作用,您可以尝试William对其答案的评论,他建议将
的输出写入一个临时文件,并分别将该文件写入两个while循环。我不知道为什么不是每次都创建
file.txt