Es wird zwischen Befehlszeilenargumenten und Standardeingaben unterschieden. Eine Pipe verbindet die Standardausgabe eines Prozesses mit der Standardeingabe eines anderen. Damit
ls | echo
Verbindet den Standardausgang von ls mit dem Standardeingang von Echo. Gut, oder? Nun, echo ignoriert die Standardeingabe und gibt seine Befehlszeilenargumente - in diesem Fall keine für - seine eigene Standardausgabe aus. Die Ausgabe: gar nichts.
In diesem Fall gibt es einige Lösungen. Eine Möglichkeit besteht darin, einen Befehl zu verwenden, der stdin liest und stdout ausgibt, z. B. cat.
ls | cat
Wird "funktionieren", abhängig von Ihrer Definition der Arbeit.
Aber was ist mit dem allgemeinen Fall? Was Sie wirklich wollen, ist die Konvertierung von stdout eines Befehls in Befehlszeilenargumente eines anderen. Wie andere gesagt haben, xargs
ist das kanonische Hilfsprogramm in diesem Fall das Lesen der Befehlszeilenargumente für einen Befehl aus der Standardeingabe und das Erstellen der auszuführenden Befehle.
ls | xargs echo
Sie können dies auch mit dem Substitutionsbefehl umwandeln $()
echo $(ls)
Würde auch machen was du willst.
Diese beiden Tools sind ziemlich grundlegend für die Skripterstellung in der Shell. Sie sollten beide lernen.
Der Vollständigkeit halber ist, wie Sie in der Frage angeben, die andere grundlegende Möglichkeit, stdin in Befehlszeilenargumente zu konvertieren, der integrierte Befehl der Shell read
. Es konvertiert "Wörter" (Wörter, wie durch die IFS
Variable definiert ) in eine temporäre Variable, die Sie in allen Befehlsläufen verwenden können.
ls | echo
zu tun? warum nicht einfach rennenls
?