2017-07-10 12 views
-1

私はx、y、zの3つのファイルをいくつか持っています。"cat x y z> z"はどのように機能しますか?

$cat x y z > zを実行すると、xとyをzに書き込む前にファイルzを切り捨てているようです。

私はそれがちょうどであると予想しています。x、y、zの内容をzに連結してください。なぜそうでないのか誰かが説明できますか?また、私も開始されcat前に、出力用のzを開いて、それを切り捨てることにより

$ echo "one" > x 
$ echo "two" > y 
$ echo "three" > z 
$ cat x y z 
    one 
    two 
    three 
$ cat x y z > z 
    cat: z: input file is output file 
$ cat z 
    one 
    two 
+2

まず、ファイル 'z'を連結しません。ファイル' z'の内容を上書きします。連結したい場合は、この '>>'を使用してください。また、警告手段は、ファイル「z」が入力され、出力が「z」であることを意味する。この 'z> z' –

+0

を試しても何が起こるのでしょうか? 3つの1単語ファイルの例を教えてください。あなたはコマンド '' 'を連結しようとしましたか?何が起こるのですか – JeffUK

答えて

5

シェルは、>zに作用しているを受け、この警告を説明してください。 catは、各入力のinodeに対してstdoutのinodeをチェックすることによって無限ループ(ディスクがいっぱいになるまで無限ループ)からあなたを保護しています。

-1

単一>は、演算子のRHS上のファイルを上書きしますが、>>は、RHSオペランドにLHSオペランドを追加します。 >>で試してください。 これは、cat x y z >> some_other_fileを使用している場合に機能します。

+0

同じ入力と出力で '>>'を使うと、ファイルから読み込み、最後に追加してからもう一度読み込んだり再度書き込んだりするので無限ループになりますに。 – Barmar

+0

これは、 'cat'が出力と同じなら入力ファイルをスキップする理由です。 – Barmar

+0

'cat y z' >> x? – Mischa

関連する問題