Unterschied zwischen Pipelining und Umleitung in Linux

8

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.

    
user685275 27.04.2011, 10:52
quelle

3 Antworten

11

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 .

    
Ignacio Vazquez-Abrams 27.04.2011, 10:55
quelle
3

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%     
William Pursell 27.04.2011 11:10
quelle
1

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.

    
Wizard Z. 22.08.2017 10:18
quelle

Tags und Links