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.