3

同僚が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でも動作するようになりました。

なんで?

(具体的には、切り捨ての問題の解決策には関心がありませんが、オペレーティングシステムの種類によって動作が異なる理由の説明に関心があります。)

4

1 に答える 1

1

tee書き込み用の引数を開き、プロセスでそれらを切り捨てますが、ファイルを最初に開くかどうかheadtee偶然に任されています。どちらの動作も有効です。このミニスクリプトが何か役に立つことをすることに頼るべきではありません。

于 2011-03-04T10:54:33.967 に答える