Wenn ich den Inhalt von file2
machen möchte mit dem Inhalt von file1
übereinstimmen , könnte ich natürlich einfach cp file1 file2
ausführen .
Wenn ich jedoch alles erhalten möchte über file2
außer den Inhalt – Eigentümer, Berechtigungen, erweiterte Attribute, ACLs, feste Links usw. usw., dann würde ich cp
nicht ausführen wollen .* In diesem Fall möchte ich nur den Inhalt von file1
ploppen in file2
.
Es sieht so aus, als würde Folgendes funktionieren:
< file1 > file2
Aber es funktioniert nicht. file2
auf nichts gekürzt und nicht geschrieben. Allerdings
cat < file1 > file2
macht Arbeit.
Es hat mich überrascht, dass die erste Version nicht funktioniert.
Ist die zweite Version ein UUOC? Gibt es eine Möglichkeit, dies zu tun, ohne einen Befehl aufzurufen, indem Sie einfach Umleitungen verwenden?
Hinweis:Mir ist bewusst, dass UUOC eher ein pedantischer Punkt als ein echtes Anti-Pattern ist.
*Wie tniles09 festgestellt hat, cp
wird in diesem Fall tatsächlich funktionieren.
Akzeptierte Antwort:
cat < file1 > file2
ist kein UUOC. Klassischerweise <
und >
führen Umleitungen durch, die Dateideskriptor-Duplizierungen auf Systemebene entsprechen.
Dateideskriptor-Duplizierungen an sich bewirken nichts (na ja, >
Umleitungen werden mit O_TRUNC
geöffnet , um genau zu sein, kürzen Ausgabeumleitungen die Ausgabedatei). Lassen Sie nicht den <
>
Symbole verwirren Sie. Umleitungen verschieben keine Daten – sie weisen Dateideskriptoren anderen Dateideskriptoren zu.
In diesem Fall öffnen Sie file1
und weisen Sie diesen Dateideskriptor dem Dateideskriptor zu (
<file1
==0<file1
) und file2
und weisen Sie diesen Dateideskriptor dem Dateideskriptor 1
zu (>file2
==1>file2
).
Jetzt, da Sie zwei Dateideskriptoren haben, brauchen Sie einen Prozess, um Daten zwischen den beiden zu schaufeln – und das ist cat
ist für.