Frage

ls > ls.out

Dies wird auch ls.out in der Liste enthalten. Mein Verständnis ist:> (Shell-Ausgabe Umleitungsoperator eine Datei schafft erstes (die STDOUT- nehmen), wenn es nicht bereits vorhanden ist und dann ls Befehl kommt zu spielen und es ist mit der gerade in der Ausgabe ls.out Datei erstellt. Ist das richtig? Wenn nicht, können Sie bitte die Funktionsweise dieses Befehls auszuarbeiten.

In ähnlicher

wc temp > temp

Wird drucken 0 0 0 Temp in der gerade erstellten temporären Datei.

Dieses Verhalten von Shell ist interessant. Ich frage mich, wie es tatsächlich funktioniert. BTW, sind beide Übungen in der Unix-Programmierumgebung Buch. Als ich die Antwort bereits erwähnt, möchte ich einige Experten mein Verständnis zu korrigieren.

War es hilfreich?

Lösung

Wenn die Standardausgabe mit > Umleitung, die Shell die Datei erstellen (als leere Datei), wenn es nicht bereits vorhanden ist. Ferner wird die Datei vor der Shell Gabeln und execs geöffnet der Befehl ausgeführt wird. Wenn Sie wc temp > temp tun, öffnet sich die Shell die Datei zum Schreiben und dann Gabeln und execs wc auf seiner geöffneten Datei vorbei in den Prozess behandelt.

Andere Tipps

Simplifizierung:

ls schaut auf den inode (Verzeichniseintrag), die die Umleitung erstellt.

wc kann die Inode sehen, dass die Umleitung erstellt, aber wenn es auf den Inhalt sieht sie sind leer, weil es (wc) sie noch nicht geschrieben hat.

Edit:

Als erstes wird in beiden Fällen die Umleitung (>ls.out oder >temp) erzeugt eine leere Datei. Ein Eintrag (Inode) im Verzeichnis wird auf den Speicherort der Datei zu zeigen und einige Informationen darüber enthält. Sehen Sie sich die Wikipedia-Artikel über Inodes .

Als nächstes wird im Fall von ls, alle Einträge in dem Verzeichnis, einschließlich der für ls.out, die gerade erstellt wurde , gelesen und geschrieben stdout (was in diesem Fall wird der Inhalt von ls.out).

Oder im Fall von wc, es ist das Zählen des Newline, Wort- und Byte-Anzahl der neu erstellten Datei namens temp , die leer ist , so schreibt es die Null zählt in die Datei nach zählt (nichts).

Der Inhalt der Dateien (temp oder ls.out) wird nicht geschrieben, bis schließlich das Lesen durchgeführt wird, so dass sie nicht aufgenommen haben.

Für eine bessere Weise zu vergleichen , was ls und wc tun, versuchen Sie diesen Befehl (wenn ls.out ist nicht existent):

ls -l > ls.out

Sie sollten sehen, dass die Dateigröße für ls.out Null ist nach der Liste innen (cat ls.out) enthalten ist, aber wenn man Sie ls -l ls.out werden sehen, dass es nicht Null ist. Dies entspricht dem, was Sie sehen, geschieht mit wc.

betrachten wc -l temp > temp

Wenn temp bereits existiert und hatte 20 Zeilen immer noch sagen, das Ergebnis der cat temp nach dem obigen Befehl ausgeführt wird, wird es 0 Temp sein.

Ich denke, das liegt daran, dass der Schal eine neue leere temp schafft auch wenn temp bestand somit die bestehenden temporären Überschreiben und damit, wenn wc die num von Linien in temp zu zählen versucht, es wird Null.

In der Tat > temp wird von Shell zuerst ausgeführt und dann wird wc -l temp ausgeführt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top