4

このコードが機能する理由を誰かに説明してもらえますか (つまり、file2.txt は file1.txt の内容をアルファベット順に並べ替えたものです):

cat file1.txt | sort > file2.txt

しかし、これを行うと、file1.txt自体が空白になります...?

cat file1.txt | sort > file1.txt

ご想像のとおり、ファイルの内容をアルファベット順に並べ替えてから、同じファイルに書き戻そうとしています...

(私はmac 10.8.3の端末を使用しています。執筆日は2013年5月19日です)

4

1 に答える 1

7

シェルは、出力用sortに開いた後に開始file1.txtします (出力を切り捨てます。つまり、すべてのデータを破棄します)。次に、読み取り用catfile1.txt開きます。シェルのセマンティクスは、パイプラインが から 1 ページ程度の入力を取得することが実行可能であるようなものですfile.txtが、実際にはほとんどすべてのシェル (つまり、すべてのシェルですが、おそらく私が一度も使用したことのないシェルがいくつかあります)このように動作しないものを使用) はcat、データを読み取る前にファイルを切り捨てます。

この操作を実行するには、一時ファイルを使用する必要があります。(まあ、一時ファイルを使用することは必須ではありません。ファイルが十分に小さい場合、このようなものはおそらく機能cat file1.txt | ( sleep 2; sort > file1.txt )しますが、保証されていません。)

于 2013-05-19T11:35:37.300 に答える