Pourquoi la redirection bash vers un fichier se produit en mode ajout


Réponses:


19

Ce qui vous manque, c'est que vous n'ouvrez (et ne tronquez) le fichier fqu'une seule fois, lors de l' execappel. Les deux echocommandes écrivent simplement dans un descripteur de fichier déjà ouvert. Le fichier fne sera donc pas tronqué par aucun des echoappels.

Pour rediriger la sortie standard vers un descripteur de fichier, la syntaxe est >&noù se ntrouve un petit entier positif désignant le descripteur de fichier (il n'y a pas de >>&nredirection). Le descripteur de fichier doit déjà être associé à un fichier ouvert pour que cela fonctionne. C'est l'acte d'ouvrir le fichier et de l'associer à un descripteur exec 3>fqui tronque le fichier ( exec 3>>fn'aurait pas tronqué le fichier et l'aurait ouvert en mode ajout). Le simple fait d'écrire avec >&3n'ouvre pas le fichier et ne le tronque pas.

Ça aurait été différent si tu l'avais fait

echo foo >f
echo bar >f
cat f

(chacun echos'ouvre et tronque f), ou, plus alambiqué,

exec 3>f; echo foo >&3
exec 3>f; echo bar >&3
exec 3>&- # close fd 3
cat f

(le fichier est ouvert et tronqué par execavant chacun echo).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.