Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
Linux BASH嵌套进程替换_Linux_Bash_Pipe_Named Pipes_Process Substitution - Fatal编程技术网

Linux BASH嵌套进程替换

Linux BASH嵌套进程替换,linux,bash,pipe,named-pipes,process-substitution,Linux,Bash,Pipe,Named Pipes,Process Substitution,我试图在while循环中使用进程替换的标准值,如下所示: #!/bin/bash FILE_1=f1.txt FILE_2=f2.txt while read LINE; do echo "$LINE" done < <(paste <(tail -f "$FILE_1") <(tail -f "$FILE_2")) #/bin/bash 文件_1=f1.txt 文件_2=f2.txt 读行时;做 回音“$LINE” 完成

我试图在while循环中使用进程替换的标准值,如下所示:

#!/bin/bash

FILE_1=f1.txt
FILE_2=f2.txt

while read LINE; do
    echo "$LINE"
done < <(paste <(tail -f "$FILE_1") <(tail -f "$FILE_2"))
#/bin/bash
文件_1=f1.txt
文件_2=f2.txt
读行时;做
回音“$LINE”

完成<我认为您有两个主要问题。首先,您需要结合使用here字符串命令替换,以及过程替换,以实现所需的重定向。例如:

while read LINE
do 
    echo "$LINE"
done <<< "$( paste <( tail -2 "$FILE_1" ) <( tail -2 "$FILE_1" ) )"
读取行时
做
回音“$LINE”

完成当标准输出不是终端时,
粘贴将缓冲其输出。您的命令是有效的,在发生任何事情之前,它只需要一定量的输入

要立即获得输出,可以使用
stdbuf
取消缓冲stdout:

stdbuf -oL paste <(tail -f "$FILE_1") <(tail -f "$FILE_2") | while read LINE; do...

stdbuf-oL paste@Kashyap No,我正在尝试用重定向进行进程替换。我不确定@Kashyap是什么意思:我找不到任何关于使用@Kashyap的信息,这些文档混在一起了,但这完全是在转移注意力。删除此评论线程将是一个很好的方法。对我来说,听起来像是缓冲。你有没有检查过,它不仅仅是等待你在文件中添加足够多的行数?@thatotherguy:缓冲到底是什么?它应该是从管道中读取数据,对吗?我相信一旦数据可用,读取就会被解锁。只要将两个进程替换作为输入的粘贴命令就可以很好地工作,那么我如何获得标准输出流呢?谢谢,我将研究如何使用这些元素的组合。你能解释一下为什么我尝试的流程替换不起作用吗?只需将两个进程替换作为输入的粘贴命令就可以很好地工作,那么如何获得标准输出流呢?
while read LINE
do 
    echo "$LINE"
done <<< "$( paste <( tail -2 "$FILE_1" ) <( tail -2 "$FILE_1" ) )"
stdbuf -oL paste <(tail -f "$FILE_1") <(tail -f "$FILE_2") | while read LINE; do...