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