file2
の内容を作成したい場合 file1
の内容と一致する 、明らかに cp file1 file2
を実行できます 。
ただし、すべてを保持したい場合 file2
について 例外 コンテンツ(所有者、権限、拡張属性、ACL、ハードリンクなど)の場合、 cp
を実行したくありません。 。*その場合は、 file1
の内容を削除したいだけです。 file2
に 。
次のようになります:
< file1 > file2
しかし、それは機能しません。 file2
何にも切り捨てられず、書き込まれません。ただし、
cat < file1 > file2
します 仕事。
最初のバージョンが機能しないことに驚きました。
2番目のバージョンはUUOCですか?リダイレクトを使用するだけで、コマンドを呼び出さずにこれを行う方法はありますか?
注:UUOCは、真のアンチパターンというよりも、より重要なポイントであることを認識しています。
* tniles09が発見すると、 cp
予定 実際、この場合は機能します。
承認された回答:
cat
UUOCではありません。古典的には、 <
および
>
システムレベルでのファイル記述子の複製に対応するリダイレクトを実行します。
ファイル記述子の複製自体は何もしません(>
リダイレクトはO_TRUNC
で開きます 、正確に言うと、出力リダイレクトは出力ファイルを切り捨てます)。 <
にさせないでください >コード> シンボルはあなたを混乱させます。リダイレクトはデータを移動しません。ファイル記述子を他のファイル記述子に割り当てます。
この場合、 file1
を開きます そのファイル記述子をファイル記述子に割り当てます (
0
file2
そのファイル記述子をファイル記述子1
に割り当てます (> file2
== 1> file2
。
2つのファイル記述子ができたので、2つの間でデータをシャベルするプロセスが必要です。これが cat
です。 です。