想像する:
$ 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
か? (参照してくださいgrep
grep
inode
ソースコードはこちら/ 1377〜1403行)。
残念ながら、t0.txt
結果としてコンテンツが失われます。