現在、ディレクトリに名前が付けられたファイルがあり、abc
ここにいくつかのテキストが含まれているとします。コマンドを実行するとき:
cat abc > abc
ファイルの内容abc
が消えるのはなぜですか?
コマンドがテキストを削除し、ファイルが空のファイルになるのはなぜですか?
答え1
仕事が行われる順序のためです。
これを行うとき:
cat abc > abc
>
出力リダイレクト演算子です。シェルがそれを検出すると、O_TRUNC
ieフラグを使用して切り捨てモードでファイルを開くため、ファイルの内容はすべて消えます。このリダイレクトは、コマンドが実行される前にシェルによって最初に実行されます。open(2)
open("abc", O_TRUNC)
cat
したがって、コマンドが cat abc
実行されると、ファイルがabc
切り捨てられ、cat
ファイルが空であるように見えます。
答え2
に追加する@heemaylの答え、何が起こるかについてコードをより明確にするには、コマンドの先頭にリダイレクトを入れます。
> abc cat abc