Lorsque vous redirigez quelque chose vers &_number_
vous n'ouvrez pas du tout un nouveau fichier ; vous êtes en train de réutilisation d'un fichier déjà ouvert ainsi que le mode dans lequel il a été ouvert.
Les numéros se réfèrent à des handles (descripteurs de fichiers) de type "open file" (fichier ouvert). Il n'y a donc pas de différence technique entre la façon dont les >&
y >>&
(et en effet <&
) fonctionnerait - ils signifient tous simplement "cloner le descripteur de fichier existant en utilisant dup()".
C'est-à-dire, 2>&1
indique que le descripteur de fichier n° 1 (que vous avez ouvert précédemment) pour l'ajout en utilisant >>logfile
) est cloné dans le numéro 2. Et oui, 2<&1
fonctionne de manière identique.
Note technique secondaire : l'addition ou la troncature n'est pas une action explicite effectuée par le Shell ; il s'agit en fait d'un mode que le Shell spécifie. à l'ouverture le fichier, et le reste est effectué par le système d'exploitation lui-même. Par exemple, lorsque vous utilisez >
le Shell n'est pas manuellement efface l'ancien contenu, il ajoute simplement O_TRUNC lors de l'appel à open(). Par conséquent, lorsque open() n'est pas appelé à tous le mode précédent reste inchangé.