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 f
im exec
Aufruf nur einmal öffnen (und abschneiden) . Die beiden echo
Befehle schreiben nur in einen bereits geöffneten Dateideskriptor. Die Datei f
wird daher bei keinem echo
Aufruf abgeschnitten .
Um die Standardausgabe an einen Dateideskriptor zu umleiten, ist die Syntax , >&n
wo n
einige kleine positive ganze Zahl ist , bezeichnet den Dateideskriptor (es keine >>&n
Umleitung). 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>>f
hä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 exec
vor jedem geöffnet und abgeschnitten echo
).