Gibt es eine zeilenweise Bash-Pipe?

Gibt es eine zeilenweise Bash-Pipe?

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 unbufferin manchen Situationen. unbufferVerwenden Sie zur Verwendung in einer Pipeline das Flag -p.

$ process1 | unbuffer -p process2 | process3

Verweise

verwandte Informationen