Wenn man ein bischen logisch nachdenkt, MUSS es so sein, ein anderes Verhalten macht meiner Meinung nach eigentlich keinen Sinn: wie schon i_hasser geschrieben hat, funktioniert die Ausgabeumleitung mit beliebig großen Datenmengen, man kann theoretisch Datenströme mit Größen gegen unendlich durch eine Pipe jagen (der Prozeß läuft dann halt eine ganze Weile
. Die Shell muss VOR der Verarbeitung der Daten die Ausgabekanäle öffnen. Normalerweise ist dies die Console, auf der man gerade arbeitet, im Falle einer ausdrücklichen Umlenkung in eine Datei wird die Datei geöffnet.
Wenn Du eine einfache spitze Klammer schreibst, wird eine bereits vorhandene zuerst geleert, bei zwei Klammern wird das, was da kommen mag, an die vorhandenen Daten angehängt. Ein kleiner Test zeigt, dass zumindest in der Bash unter Linux die Inode für die Datei erhalten bleibt:
Code:
$ echo hallo > blabla.text
$ ls -i blabla.text
803516 blabla.text
$ echo hallo > blabla.text
$ ls -i blabla.text
803516 blabla.text
Die Inode-Nummer hat sich nicht verändert, daher gehe ich mal davon aus, dass die Datei geleert und nicht gelöscht wurde (außer eine neu angelegte Inode bekommt die gleiche Nummer wie die zuletzt gelöschte).
Wenn dann nun also endlich die Ausgabedatei geöffnet ist, fängt die Shell an, das Kommando auszuführen und die Datenkanälee stdout und stderr (und evtl. weitere von dem ausgeführten Programm verwendete Ausgabekanäle) in ihre jeweiligen Ablagen zu plazieren.
(Der Prozeß endet, wenn das Programm zu ende ist, oder auch, wenn die Platte voll ist und nichts mehr ausgegeben werden kann)
Hoffentlich habe ich jetzt keinen Unsinn geschrieben, ich denke aber, dass es genauso ablaufen muss und gar nicht anders gehen kann.