Warum die Bash-Umleitung zu einer Datei im Append-Modus erfolgt

8

angesichts dieses Ausschnitts:

exec 3>f
echo foo >&3
echo bar >&3
cat f # returns foo bar

Warum wird Bash an f angehängt? Vermisse ich etwas

user374819
quelle

Antworten:

19

Was Ihnen fehlt, ist, dass Sie die Datei fim execAufruf nur einmal öffnen (und abschneiden) . Die beiden echoBefehle schreiben nur in einen bereits geöffneten Dateideskriptor. Die Datei fwird daher bei keinem echoAufruf abgeschnitten .

Um die Standardausgabe an einen Dateideskriptor zu umleiten, ist die Syntax , >&nwo neinige kleine positive ganze Zahl ist , bezeichnet den Dateideskriptor (es keine >>&nUmleitung). Der Dateideskriptor muss bereits einer geöffneten Datei zugeordnet sein, damit dies funktioniert. Es ist der Vorgang des Öffnens der Datei und des Zuordnens zu einem Deskriptor exec 3>f, der die Datei abschneidet ( exec 3>>fhätte die Datei nicht abgeschnitten und sie im Append-Modus geöffnet). Nur mit zu schreiben, >&3öffnet die Datei nicht und schneidet sie auch nicht ab.

Es wäre anders gewesen, wenn du es getan hättest

echo foo >f
echo bar >f
cat f

(jeder echoöffnet und schneidet f) oder, verworrener,

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

(Die Datei wird execvor jedem geöffnet und abgeschnitten echo).

Kusalananda
quelle