Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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_Csv_Pipe - Fatal编程技术网

Linux 在bash中,循环并发送要执行的命令

Linux 在bash中,循环并发送要执行的命令,linux,csv,pipe,Linux,Csv,Pipe,我试图执行一个程序,并根据我正在读取的文件向它发送命令,但一旦我发送命令,循环就会停止..它必须与管道有关,但如果有人能解释它们是如何工作的,我将不胜感激 代码: 函数设置值{ 回显“$1”>&9 } mkfifo程序 /程序 exec 9>program.fifo 读取值时 做 setValue$value 完成

我试图执行一个程序,并根据我正在读取的文件向它发送命令,但一旦我发送命令,循环就会停止..它必须与管道有关,但如果有人能解释它们是如何工作的,我将不胜感激

代码:

函数设置值{
回显“$1”>&9
}
mkfifo程序
/程序
exec 9>program.fifo
读取值时
做
setValue$value
完成

file.csv有8000行,但程序在第一行之后停止…并在csv的任何其他行上完成执行而不循环

保持管道打开以读取循环。在读取第一行之后,循环未完成,它可以继续执行到文件的结尾:

exec 9 <> program.fifo
exec 9 program.fifo

程序.fifo中读取的是什么?如果没有进程正在读取它,那么脚本将被阻止尝试写入。在某个进程读取fifo之前,写入不会完成。

我的猜测是,您在while循环中没有向我们显示的代码正在消耗其所有stdin,这与while循环的输入相同。避免这种情况的最干净的方法是确保循环中的命令不是从与循环相同的文件中读取的。有很多方法可以做到这一点;我喜欢:

while read value; do {
   commands
} < /dev/null
done  < file.csv
读取值时;做{
命令
}
这是第三方程序的一个参数,但我认为脚本不会被阻止。因为代码不是在文件的第一行等待,而是直接完成循环的执行..并且它完成代码而不再从文件中读取任何内容。
while read value; do {
   commands
} < /dev/null
done  < file.csv