catコマンドが最初のファイル記述子からのみ読み取られるのはなぜですか?

catコマンドが最初のファイル記述子からのみ読み取られるのはなぜですか?

コンソールで空のファイルを2つ作成し、同時に読み取ろうとしました。

$ echo -n '' | tee f1 > f2
$ cat f1 f2
$ cat <(tail -f f1) <(tail -f ./f2)

別のコンソールでテストを実行しました。

$ echo 'tee test' | tee -a f1 >> f2
$ echo 'f1 test' >> f1
$ echo 'f2 test' >> f2
$ cat f1 f2
tee test
f1 test
tee test
f2 test

ただし、cat最初のコンソールでは最初の項目のみが読み取られますfd

$ cat <(tail -F ./f1) <(tail -F ./f2)
tee test
f1 test

なぜ?それでは、2つ以上のファイル記述子を同時に読み取る方法は何ですか?

ベストアンサー1

catその引数を順番に処理します。tail -f f1実行が継続されるため、へcatの入力を待ち続け、<(tail -f f1)処理を続行しません<(tail -f f2)

tail -f f2最初の項目を終了すると出力が表示されますtail

複数のファイルを同時に追跡するためのより良いツールはtailそれ自体です(少なくともGNU tail)。

tail -f f1 f2

ファイルヘッダーを表示したくない場合は、次のようにします-q

tail -qf f1 f2

おすすめ記事