Es gibt hier ein paar verschiedene Verweise auf "Eingabe", daher werde ich zunächst einige Szenarien vorstellen, um dies zu verstehen. Für Ihre schnelle Antwort auf die Frage in kürzester Form :
stat testfile < <($1)> outputfile
Der obige Befehl führt eine Statistik für die Testdatei durch, nimmt das STDOUT (leitet es um) und fügt es in die nächste Sonderfunktion (den <() -Teil) ein und gibt dann die Endergebnisse dessen, was auch immer das war, in eine neue Datei (Ausgabedatei) aus. Die Datei wird aufgerufen und dann mit den eingebauten Bash-Funktionen referenziert (jeweils $ 1 danach, bis Sie einen neuen Befehlssatz beginnen).
Ihre Frage ist großartig und es gibt verschiedene Antworten und Möglichkeiten, dies zu tun, aber es ändert sich tatsächlich mit dem, was Sie speziell tun.
Zum Beispiel können Sie das auch in einer Schleife abspielen, was sehr praktisch ist. Eine gebräuchliche Verwendung in der Pseudocode-Denkweise ist:
run program < <($output_from_program)> my_own.log
Indem Sie das berücksichtigen und dieses Wissen erweitern, können Sie beispielsweise Folgendes erstellen:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
Dies führt ein einfaches ls -A in Ihrem aktuellen Verzeichnis aus und teilt dann mit, während jedes Ergebnis von ls -A bis (und hier ist es schwierig!) Grep "thatword" in jedem dieser Ergebnisse durchlaufen und führt nur das vorherige aus printf (in rot), wenn tatsächlich eine Datei mit dem Zusatz "thatword" gefunden wurde. Außerdem werden die Ergebnisse des grep in einer neuen Textdatei protokolliert, files_that_matched_thatword.
Beispielausgabe:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
index.html
All dies druckte einfach das Ergebnis von ls-A aus, nichts Besonderes. Füge etwas hinzu, damit es diesmal grept:
echo "thatword" >> newfile
Führen Sie es jetzt erneut aus:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
files_that_matched_thatword index.html newfile
Found a file: newfile:thatword
Vielleicht ist die Antwort anstrengender, als Sie derzeit suchen, aber ich glaube, dass Sie bei zukünftigen Bemühungen viel mehr davon profitieren werden, wenn Sie solche Notizen in der Hand halten.
<
(Eingabe von der Datei zur linken Seite) oder|
(Eingabe vom Stream zur rechten Seite) weitergeleitet werden. Es besteht ein Unterschied.