grep:出力ファイルでもあるのに入力ファイルを消去するのはなぜですか? [コピー]

grep:出力ファイルでもあるのに入力ファイルを消去するのはなぜですか? [コピー]

想像する:

$ cat t0.txt
xxx

$ grep xxx t0.txt > t0.txt
grep: t0.txt: input file is also the output

# exit status 2

$ cat t0.txt
<nothing>

質問:入力ファイルも出力であり、存在状態が2(エラー発生)の場合、入力ファイルを消去する必要があるのはなぜですか?

答え1

シェルリダイレクトが最初に発生するため、まずシェルが出力ファイルを空にしてから、入力と出力が同じであると文句を言います。 grepは入力と出力のファイル番号を確認するので、両方が同じであることをどうやって知ることができますt0.txtか? (参照してくださいgrepgrepinodeソースコードはこちら/ 1377〜1403行)。

残念ながら、t0.txt結果としてコンテンツが失われます。

関連情報