Ubuntuの名前付きパイプから一度にn行を読む

Ubuntuの名前付きパイプから一度にn行を読む

Ubuntuで名前付きパイプを試してみましたが、以前に使ったことはありません。私は次のことをしました。

mkfifo pipe
ls>pipe&
cat pipe

これにより、マイフォルダにあるすべてのファイルのリストがpipe表示されます。一度にパイプの2行を読み取ろうとします。だから、一度実行すると、フォルダの最初のファイルと2番目のファイルの名前を提供するコマンドが必要です。コマンドを再実行すると、3番目と4番目のファイル名が必要です。これを行う方法はありますか?

私は努力したhead -2 pipe。最初の2つのファイル名が表示されます。しかし、もう一度実行すると停止します。前進する正しい方法は何ですか?

ベストアンサー1

読み取り側でFIFOを開いたままにしたい。 1つの方法は、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.

おすすめ記事