2008-09-15 4 views
4

Während ich * nix piped Befehle erstelle, finde ich, dass ich die Ausgabe einer Stufe sehen möchte, um die Korrektheit zu verifizieren, bevor ich die nächste Stufe baue, aber ich möchte nicht jede Stufe wiederholen. Kennt jemand ein Programm, das dabei hilft? Es würde die Ausgabe der letzten Stufe automatisch für neue Stufen beibehalten. Normalerweise tue ich dies, indem ich das Ergebnis jedes Befehls an eine temporäre Datei sende (d. H. Tee oder führe jeden Befehl nacheinander aus), aber es wäre schön, wenn ein Programm damit umgehen würde.Debugger für Unix-Pipe-Befehle

Ich stelle mir etwas wie eine Registerkartenschnittstelle vor, wo jede Registerkarte mit jedem Pipe-Befehl beschriftet ist und die Auswahl einer Registerkarte die Ausgabe (mindestens einhundert Zeilen) des Befehls auf das vorherige Ergebnis zeigt.

+0

-T erfordert mich die manuelle Arbeit zu tun, dass dieses Programm automatisch tun sollte. –

Antwort

5

Use ‚tee‘ für einige Datei, um die Zwischenergebnisse kopieren sowie übergeben sie an die nächste Stufe des Rohres auf, etwa so:

cat /var/log/syslog | tee /tmp/syslog.out | grep something | tee /tmp/grep.out | sed 's/foo/bar/g' | tee /tmp/sed.out | cat >>/var/log/syslog.cleaned 
1

tee (1) ist dein Freund. Er sendet seine Eingabe sowohl an die angegebene Datei als auch an die Standardausgabe.

Kleben Sie es zwischen Ihre Rohre. Zum Beispiel:

ls | tee /tmp/out1 | sort | tee /tmp/out2 | sed 's/foo/bar/g' 
2

Sie auch Rohre verwenden können, wenn Sie die bidirektionale Kommunikation müssen (dh mit netcat):

mknod backpipe p 
nc -l -p 80 0<backpipe | tee -a inflow | nc localhost 81 | tee -a outflow 1>backpipe 

(via)

1

Es gibt auch die "pv" Befehl - in Debian/Ubuntu-Repositories, die den Durchsatz Ihrer Pipes anzeigen.

Ein Beispiel aus der man-Seite: aus einem anderen Prozess eine Datei übertragen und die erwartete Größe zu pv vorbei:

  cat file | pv -s 12345 | nc -w 1 somewhere.com 3000