同僚がbashシェルスクリプトでファイルの切り捨てを実験していました。バイナリファイルから最初の2バイトを抽出します。
以下は、BSD / OS X(出力の「12」)では正常に機能しましたが、Linux(出力は空でした)では機能しませんでした。
echo 1234 >test
head -c2 test | tee test >/dev/null
head | tee
サブシェルで実行するようにパーツを変更する
echo 1234 >test
(head -c2 test | tee test >/dev/null)
Linuxでも動作するようになりました。
なんで?
(具体的には、切り捨ての問題の解決策には関心がありませんが、オペレーティングシステムの種類によって動作が異なる理由の説明に関心があります。)