Gestern habe ich diesen SO-Kommentar gelesen , der besagt, dass in der Shell (zumindest bash
) >&-
"dasselbe Ergebnis hat wie" >/dev/null
.
Dieser Kommentar bezieht sich tatsächlich auf den ABS-Leitfaden als Informationsquelle. Diese Quelle besagt jedoch, dass die >&-
Syntax "Dateideskriptoren schließt".
Mir ist nicht klar, ob die beiden Aktionen, einen Dateideskriptor zu schließen und ihn auf das Null-Gerät umzuleiten, völlig gleichwertig sind. Meine Frage ist also: Sind sie?
Auf den ersten Blick scheint das Schließen eines Deskriptors wie das Schließen einer Tür zu sein, aber das Umleiten auf ein Null-Gerät öffnet eine Tür in die Schwebe! Die beiden scheinen mir nicht genau gleich zu sein, denn wenn ich eine geschlossene Tür sehe, werde ich nicht versuchen, etwas herauszuwerfen, aber wenn ich eine offene Tür sehe, gehe ich davon aus, dass ich es kann.
Mit anderen Worten, ich habe mich immer gefragt, ob das >/dev/null
bedeutet, dass cat mybigfile >/dev/null
tatsächlich jedes Byte der Datei verarbeitet und in die Datei geschrieben wird, /dev/null
die es vergisst. Auf der anderen Seite, wenn die Shell auf einen geschlossenen Dateideskriptor stößt, glaube ich (bin mir aber nicht sicher), dass sie einfach nichts schreibt, obwohl die Frage bleibt, ob cat
immer noch jedes Byte gelesen wird.
Dieser Kommentar sagt >&-
und >/dev/null
" sollte " gleich sein, aber es ist keine so durchschlagende Antwort auf mich. Ich hätte gerne eine verbindlichere Antwort mit einem Verweis auf den Standard- oder Quellkern oder nicht ...