Perché bash reindirizzare a un file avviene in modalità append


Risposte:


19

Quello che ti manca è che stai aprendo (e troncando) il file funa sola volta, durante la execchiamata. I due echocomandi stanno solo scrivendo su un descrittore di file già aperto. Il file non fverrà quindi troncato da nessuna delle echochiamate.

Per reindirizzare l'output standard su un descrittore di file, la sintassi è >&ndove nc'è un piccolo numero intero positivo che indica il descrittore di file (non c'è >>&nreindirizzamento). Il descrittore di file deve già essere associato a un file aperto affinché funzioni. È l'atto di aprire il file e associarlo a un descrittore con exec 3>fquello che tronca il file ( exec 3>>fnon avrebbe troncato il file e l'avrebbe aperto in modalità append). La sola scrittura con >&3non apre il file né lo tronca.

Sarebbe stato diverso se l'avessi fatto

echo foo >f
echo bar >f
cat f

(ognuno echosi apre e si tronca f), o, più contorto,

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

(il file viene aperto e troncato execprima di ciascuno echo).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.