2016-08-07 46 views
-1

Ich arbeite an einer Zuweisung für Pipes in Linux. Ich habe ein Programm, das hello world druckt. Es dauert kein Argument. Aber wenn ich das Programm ausführen und Befehlszeilenargumente wie ./a ls | wc bereitstellen. Ich bekomme die Ausgabe 0 2 11, d.h. die Ausgabe von hello world wird durch die Leitung an wc übergeben. Kann mir bitte jemand dieses Verhalten erklären.Verwenden von Pipes in Befehlszeilenargumenten

+0

Was ist zu erklären? Warum erwartest du das nicht? –

+0

... diese Frage war nicht rhetorisch: Wenn wir nicht wissen, was Ihr gegenwärtiges Verständnis ist, wie können wir eine Antwort mit Sicherheit schreiben, dass wir alle Probleme mit diesem Verständnis angehen? –

+0

(Wenn Sie aus Windows kommen, sind Sie vielleicht an eine Welt gewöhnt, in der Befehle ihre eigenen Argumentlisten parsen, vorausgesetzt, eine Zeichenfolge entspricht genau der vom Benutzer bereitgestellten. So funktioniert das nicht: Die Shell analysiert den unformatierten Text , und das einzige, was ein Befehl bekommt, ist ein C-Array einzelner Strings, eine pro Argument. –

Antwort

2

Da Ihr Programm hat keine Argumente, die Tatsache, dass Sie es ls als Argument übergeben macht keinen Unterschied zu seinem Ausgang: Es wird dieses Argument ignoriert und noch hello world emittiert, wie es wäre, wenn ls worden waren weitergegeben seine Argumentliste.


Verstehen Sie, dass eine Pipeline einen FIFO erstellt - das heißt, es verbindet zwei Programme.

./a ls ## this program's output... 
wc  ## ...is connected to this program's input. 

Die Rohrleitung ist somit kein Argument zu a; Es ist eine Anweisung an die Shell, wie man die Ausgabe von a routet, in diesem Fall eine Anweisung, es in die Standardeingabe von wc zu routen.