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.