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
-1
A
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.
Was ist zu erklären? Warum erwartest du das nicht? –
... 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? –
(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. –