从 Ubuntu 中的命名管道一次读取 n 行

skr*_*skr 2 fifo

我正在 Ubuntu 中尝试命名管道,并且之前没有使用它们的经验。我做了以下事情:

mkfifo pipe
ls>pipe&
cat pipe
Run Code Online (Sandbox Code Playgroud)

这将输入我的文件夹中所有文件的列表pipe并显示它们。我正在尝试一次读取管道 2 行。因此,我想要一个命令在执行一次时给出文件夹中第一个和第二个文件的名称。如果再次执行该命令,我需要第三个和第四个文件名。有什么办法可以做到吗?

我试过head -2 pipe。它显示前两个文件名。但再次执行时,却挂了。正确的前进方向是什么?

ica*_*rus 5

您希望在读取端保持 fifo 打开。一种方法是让 bash 保留一个打开的文件描述符。

 #!/bin/bash
 mkfifo pipe
 ls > pipe &
 exec 8< pipe
 r2(){
   read -ru 8 fn1
   read -ru 8 fn2
   echo "$fn1" "$fn2"
 }
 r2 # print out first 2 files
 sleep 1 # do something
 r2 # print out next 2 files.
Run Code Online (Sandbox Code Playgroud)