次のコマンドを検討してください
bash -c "echo x; cat 1" | tee 1。
私の理解では、新しいシェルにフォークし、xstdoutに書き込みfile 1 not found、stderrに書き込み、終了して親プロセスに制御を返し、xstdoutとtoに書き込み1ます。したがって、私は最終的な出力がであることを期待しx、ファイル1には文字列が正確に含まれますx。
ただし、これは当てはまりません。実際には、ファイルに1は通常、の少なくとも2つのインスタンスが含まれx、時には数千行のxs が含まれます。コマンドを1万回実行するバッチテストでx、ファイルに書き込まれたsの平均数は52.3で、中央値は1でした。これを引き起こしているメカニズムは何ですか。この動作をモデル化する確率分布は何ですか?私はそれが条件付きで幾何学的で、それ以外は均一であると思います。
ここでの限られたテスト
—
Renan
xから、ファイルに書き込まれたの平均数は4.35でした。それはマシンの負荷に大きく依存すると思います。
teeにcat開く前に書き込み用にファイルを開いた場合、ファイルに多くのx-esが表示されることがあります。その場合、「ループ」は書き込みcatよりも読み取りが速くなると必ずtee終了し、ファイルの最後に到達します。