【发布时间】:2014-08-06 23:48:57
【问题描述】:
我要问一个关于括号内带有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)
关键是我的脚本在第一个 while 循环结束之前工作正常。但是第二个有问题。
我的问题:
FirstCommand 的输出是否同时重定向到两个 while 循环?
关于FirstCommand:
这是一个生成一些文本的命令,我想将其输出重定向到 while 循环运行时。
更新
的输出附加到awk 正在使用的OtheFile。
谢谢
【问题讨论】:
-
awk 在哪里获取输入? awk 永远不会看到 FirstCommand 生成的任何文本,但会在尝试读取其标准输入时立即终止,因为第一个 while 循环已经消耗了所有数据。
-
我把 awk 命令@William Pursell
-
您是否要让第二个 while 循环先读取 awk 的输出,然后再读取 FirstCommand 的输出?
-
我希望在 FirstCommand 运行时看到
的输出到 awk,然后在 awk 生成输出到 file.txt 时 while loop做一些事情 -
所以你想让FirstCommand的输出进入第一个while循环和awk,而awk的输出进入第二个while循环?然后:
firstcommand | while ...; do ... done & firstcommand | awk | while ... do; ... done。如果 firstcommand 很昂贵,请先运行它并将其输出存储在一个文件中。
标签: bash redirect while-loop pipe