Kann mir jemand den Unterschied sagen? zum Beispiel:
wenn ich eine Datei a.txt
mit dem folgenden Inhalt habe:
ein
b) c
Was wäre der Unterschied zwischen cat a.txt | cat
und cat < a.txt
Es scheint mir, dass alle STDIN simulieren, ist das richtig, oder gibt es Unterschiede? Vielen Dank.
Piping arbeitet von einem Prozess zum anderen (der cat
s im ersten Beispiel) und benötigt daher zwei kooperierende Prozesse. Die Umleitung wird von der Shell selbst übernommen. Dies kann wichtig sein, wenn Sie Dinge in der Shell tun, wie Arbeiten mit Variablen .
Die Umleitung simuliert nicht STDIN. Wenn Sie umleiten, ist die Datei die Standardeingabe für den Prozess. Insbesondere haben viele Programme ein unterschiedliches Verhalten, wenn die Eingabe eine reguläre Datei ist, als wenn es sich um eine Pipe oder ein Tty handelt, so dass Sie möglicherweise ein anderes Verhalten erhalten. Zum Beispiel:
%Vor%Erstens sind zwei Ergebnisse gleich. Nichts zu sagen.
Für das Arbeitsprinzip von cat a.txt | cat
nimmt der erste cat das Argument a.txt
und gibt dann seinen Inhalt aus. Sie leiten die stdout
der ersten an stdin
der Sekunde. Das zweite cat
findet kein Argument, also liest es Inhalt von stdin
und druckt es.
Da Sie <
im zweiten Befehl verwenden, ersetzt das System stdin
von cat
durch den Dateistream von a.txt
. Alles andere ist dasselbe wie die zweite Katze im ersten Fall.
Tags und Links linux redirect pipelining