Si je veux rendre le contenu de file2
correspondre au contenu de file1
, je pourrais évidemment simplement exécuter cp file1 file2
.
Cependant, si je veux conserver tout à propos de file2
sauf le contenu - propriétaire, autorisations, attributs étendus, ACL, liens physiques, etc., etc., alors je ne voudrais pas exécuter cp
.* Dans ce cas, je veux juste afficher le contenu de file1
dans file2
.
Il semble que ce qui suit le ferait :
< file1 > file2
Mais ça ne marche pas. file2
est tronqué à rien et non écrit. Cependant,
cat < file1 > file2
fait travail.
Cela m'a surpris que la première version ne fonctionne pas.
La deuxième version est-elle un UUOC ? Existe-t-il un moyen de le faire sans invoquer de commande, simplement en utilisant des redirections ?
Remarque :Je suis conscient que l'UUOC est plus un argument pédant qu'un véritable anti-modèle.
*Comme tniles09 l'a découvert, cp
va fonctionne en fait dans ce cas.
Réponse acceptée :
cat < file1 > file2
n'est pas un UUOC. Classiquement, <
et >
faire des redirections qui correspondent aux duplications de descripteurs de fichiers au niveau du système.
Les duplications de descripteurs de fichiers en elles-mêmes ne font rien (enfin, >
les redirections s'ouvrent avec O_TRUNC
, donc pour être précis, les redirections de sortie tronquent le fichier de sortie). Ne laissez pas le <
>
les symboles vous confondent. Les redirections ne déplacent pas les données :elles attribuent des descripteurs de fichier à d'autres descripteurs de fichier.
Dans ce cas, vous ouvrez file1
et affectez ce descripteur de fichier au descripteur de fichier (
<file1
==0<file1
) et file2
et affectez ce descripteur de fichier au descripteur de fichier 1
(>file2
==1>file2
).
Maintenant que vous avez deux descripteurs de fichiers, vous avez besoin d'un processus pour pelleter les données entre les deux, et c'est ce que cat
est pour.