パイピング先のファイルをどのように消去または消去できますか?

パイピング先のファイルをどのように消去または消去できますか?

ファイルにパイプされるプロセスがあるとしましょう。

yes > foo

これでファイルを消去または空にしたいのですが、fooプロセスはファイルに書き込もうとしています。つまり、ファイルを消去した後にファイルの再入力を開始します。

可能ですか?

答え1

yes >> fooファイルを消去するにはyes > foo、単独で使用:>foo

yes >> foo理由readfooで開くO_APPEND。これにより、ファイルオフセットは各書き込みの前にファイルの末尾に配置されます。

したがって、yesファイルに書き込むfooたびにファイルポインタがになりますfoo。また、: > fooファイルをゼロバイトに切り捨てます。 0バイトの「終了」でファイルポインタの位置が変更され、0yesバイトの先頭で次の書き込みが再開されます。fooO_APPENDfoo

答え2

こうしてyes > fooまたやればいい。する最初の実行後にfooファイルのすべてのエントリを削除します。

次のいずれかの方法を使用できます。

rm foo
yes > foo

> foo
yes > foo

echo "" > foo
yes > foo

関連情報