GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie sende ich Stdout an mehrere Befehle?

Es gibt einige Befehle, die Eingaben filtern oder bearbeiten und sie dann als Ausgabe weitergeben, ich denke normalerweise an stdout – aber einige Befehle nehmen nur die stdin und tun, was sie damit tun, und geben nichts aus.

Ich kenne mich am besten mit OS X aus, daher fallen mir sofort zwei ein:pbcopy und pbpaste – Mittel zum Zugriff auf die Zwischenablage des Systems.

Wie auch immer, ich weiß, dass, wenn ich stdout nehmen und die Ausgabe ausspucken möchte, beide zu stdout gehen und eine Datei dann kann ich das tee verwenden Befehl. Und ich weiß ein wenig über xargs , aber ich glaube nicht, dass ich danach suche.

Ich möchte wissen, wie ich stdout aufteilen kann um zwischen zwei (oder mehr) Befehlen zu wechseln. Zum Beispiel:

cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors

Es gibt wahrscheinlich ein besseres Beispiel als dieses, aber ich bin wirklich daran interessiert zu wissen, wie ich stdout an einen Befehl senden kann, der es nicht weiterleitet und dabei stdout behält davor, „stumm“ zu sein – ich frage nicht, wie man cat eine Datei und grep einen Teil davon und kopiere ihn in die Zwischenablage – die spezifischen Befehle sind nicht so wichtig.

Außerdem – ich frage nicht, wie man das an eine Datei und stdout sendet – dies könnte eine „doppelte“ Frage sein (sorry), aber ich habe ein wenig gesucht und konnte nur ähnliche Fragen finden, die danach fragten, wie man zwischen stdout und einer Datei aufteilt – und die Antworten auf diese Fragen schienen tee , was meiner Meinung nach bei mir nicht funktionieren wird.

Schließlich fragen Sie sich vielleicht:„Warum machen Sie pbcopy nicht einfach zum letzten Element in der Pipe-Kette?“ und meine Antwort ist 1) Was ist, wenn ich es verwenden und trotzdem die Ausgabe in der Konsole sehen möchte? 2) Was ist, wenn ich zwei Befehle verwenden möchte, die stdout nicht ausgeben? nachdem sie die Eingabe verarbeitet haben?

Oh, und noch etwas – mir ist klar, dass ich tee verwenden könnte und eine benannte Pipe (mkfifo ), aber ich hatte auf eine Möglichkeit gehofft, dies inline, prägnant und ohne vorherige Einrichtung zu tun 🙂

Akzeptierte Antwort:

Sie können tee verwenden und Prozesssubstitution dafür:

cat file.txt | tee >(pbcopy) | grep errors

Dadurch wird die gesamte Ausgabe von cat file.txt gesendet zu pbcopy , und Sie erhalten nur das Ergebnis von grep auf Ihrer Konsole.

Verwandte:Ubuntu – XFCE – Fenster auf Tastendruck an anderen Monitor senden?

Sie können mehrere Prozesse in das tee einfügen Teil:

cat file.txt | tee >(pbcopy) >(do_stuff) >(do_more_stuff) | grep errors

Linux
  1. So verwenden Sie Bash-Verlaufsbefehle

  2. Senden Sie mit Terminator Befehle an mehrere SSH-Sitzungen

  3. So fügen Sie mehrere Hosts in phpMyAdmin hinzu

  4. Unix Sed Tutorial:So führen Sie mehrere Sed-Befehle aus

  5. Wie man eine Gruppe von Befehlen in Bash ausschaltet

So verwenden Sie benutzerdefinierte Befehle in LibreOffice

So konfigurieren Sie einen Proxmox VE 4-Cluster mit mehreren Knoten

So steuern Sie Vagrant Box mit Vagrant-Befehlen

So führen Sie mehrere Linux-Befehle in einem einzigen Befehl aus

So führen Sie Sudo-Befehle ohne Passwort aus

So führen Sie mehrere Linux-Befehle gleichzeitig im Linux-Terminal aus