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
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
Antworten:
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).