Pokud chci vytvořit obsah file2 odpovídá obsahu file1 , evidentně jsem mohl spustit cp file1 file2 .
Pokud však chci zachovat vše o file2 kromě obsah – vlastník, oprávnění, rozšířené atributy, seznamy ACL, pevné odkazy atd. atd., pak bych nechtěl spouštět cp .* V tom případě chci pouze plopovat obsah file1 do file2 .
Zdá se, že by to udělalo následující:
< file1 > file2
ale to nejde. file2 je zkrácen na nic a není zapsán do. Nicméně,
cat < file1 > file2
dělá práce.
Překvapilo mě, že první verze nefunguje.
Je druhá verze UUOC? Existuje způsob, jak to udělat bez vyvolání příkazu, pouze pomocí přesměrování?
Poznámka:Jsem si vědom toho, že UUOC je spíše pedantský bod než skutečný anti-vzor.
*Jak zjistil tniles09, cp bude ve skutečnosti v tomto případě fungují.
Přijatá odpověď:
cat < file1 > file2 není UUOC. Klasicky < a > provádějte přesměrování, která odpovídají duplikacím deskriptoru souboru na systémové úrovni.
Duplikace deskriptoru souboru samy o sobě nic nedělají (no, > přesměrování se otevírají pomocí O_TRUNC , abychom byli přesní, výstupní přesměrování zkrátí výstupní soubor). Nenechte < > symboly vás matou. Přesměrování nepřesouvá data – přiřazuje deskriptory souborů jiným deskriptorům souborů.
V tomto případě otevřete file1 a přiřadit tento deskriptor souboru k deskriptoru souboru (<file1 ==0<file1 ) a file2 a přiřadit tento deskriptor souboru k deskriptoru souboru 1 (>file2 ==1>file2 ).
Nyní, když máte dva deskriptory souborů, potřebujete proces, který mezi nimi přesune data – a to je to, co cat je pro.