
Ich erinnere mich, irgendwo (ich habe vergessen, wo) etwas über einen selten verwendeten Typ von Bash-Pipe gelesen zu haben, der die Ausgabe zeilenweise umleiten konnte. Mit anderen Worten, anstatt die Ausgabe einmal am Ende umzuleiten, würde die Ausgabe für jede neue Zeile umgeleitet und der Empfangsprozess mehrmals ausgeführt. Ich habe in allen Bash-Dokumenten nachgesehen, die ich in die Finger bekommen konnte, aber ich kann nicht herausfinden, ob diese „Pipe“ wirklich existiert.
Gibt es so etwas wie eine zeilenweise Pipe? Natürlich könnte die Aufgabe auch problemlos auf andere Weise erledigt werden, aber ich bin neugierig, ob es einen eleganteren Weg gibt.
Antwort1
Ich glaube, Sie suchen nach xargs? Nehmen wir also an, ich möchte alle .bak-Dateien in einem Verzeichnis finden und löschen.
find . -name "*.bak" -type f -print | xargs /bin/rm -f
Für jede gefundene Datei leitet es das Ergebnis weiter und entfernt die Datei.
http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/
Antwort2
Ich glaube, Sie meinen das Tool unbuffer
. Damit können Sie die Pufferung deaktivieren, die auftritt, wenn die Ausgabe über eine Pipe von einem Befehl an einen anderen gesendet wird.
Mit einem Befehl wie diesem wird keine Ausgabe angezeigt, bis eine Seite gepuffert wurde:
$ od -c /tmp/fifo | more
Sie können diese automatische Pufferung wie folgt deaktivieren:
$ unbuffer od -c /tmp/fifo | more
Normalerweise liest unbuffer nicht von STDIN. Dies vereinfacht die Verwendung unbuffer
in manchen Situationen. unbuffer
Verwenden Sie zur Verwendung in einer Pipeline das Flag -p.
$ process1 | unbuffer -p process2 | process3