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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.