猫リダイレクト

猫リダイレクト

現在、ディレクトリに名前が付けられたファイルがあり、abcここにいくつかのテキストが含まれているとします。コマンドを実行するとき:

cat abc > abc

ファイルの内容abcが消えるのはなぜですか?
コマンドがテキストを削除し、ファイルが空のファイルになるのはなぜですか?

答え1

仕事が行われる順序のためです。

これを行うとき:

cat abc > abc

>出力リダイレクト演算子です。シェルがそれを検出すると、O_TRUNCieフラグを使用して切り捨てモードでファイルを開くため、ファイルの内容はすべて消えます。このリダイレクトは、コマンドが実行される前にシェルによって最初に実行されます。open(2)open("abc", O_TRUNC)cat

したがって、コマンドが cat abc実行されると、ファイルがabc切り捨てられ、catファイルが空であるように見えます。

答え2

に追加する@heemaylの答え、何が起こるかについてコードをより明確にするには、コマンドの先頭にリダイレクトを入れます。

> abc cat abc

関連情報