2010-11-06 4 views
13

Ich möchte keine neuen Dateien erstellen. Ich möchte etwas ähnliches erreichen:Wie kann ich die Ausgabe von zwei Unix-Befehlen vergleichen, um den Unterschied zu finden?

cmd1 > a 
cmd2 > b 
cat a b b | sort | uniq -u 

aber ohne die Dateien a und b.

+0

Bezug: [Diff Ausgabe von zwei Programmen ohne temporäre Dateien] (http://stackoverflow.com/questions/3800202/diff-output-from-two-programs-without-temporary-files), [Wie kann ich diff die Ausgabe von zwei Befehlen?] (http://askubuntu.com/questions/229447/how-do-i-diff-the-output-of-two-commands) – kenorb

Antwort

28

Unix-Dienstprogramme sind im Allgemeinen dateiorientiert, also tut nichts, was Sie wollen.

kann jedoch zsh temporäre Dateien mit folgenden Syntax automatisch erstellt:

diff =(cmd1) =(cmd2)

Es auch temporäre Named Pipes erstellen (oder verwenden Sie die speziellen Dateien /dev/fdn anonyme Rohre zu verweisen) mit

diff <(cmd1) <(cmd2)

Allerdings rufen viele diff s lseek() auf ihre Eingabe, so wird nicht mit Named Pipes arbeiten.

(diff ist in der Regel eines nützlichen Befehl für den Vergleich sehr ähnlich Ausgang als Ihre Pipeline oben.)

Siehe „Prozess Substitution“ der „zshexpn“ man-Seite für weitere Details.

+8

Die '<(cmd)' Syntax ist eine ziemlich Standard, der auch von weit verbreiteten Shells wie bash unterstützt wird. Ich habe dies mit Diff in der Vergangenheit verwendet, ohne irgendwelche Probleme zu bemerken. – Porculus

+0

Und das heißt natürlich nicht nur mit 'diff'. Ich benutze es auch für 'vimdiff' und andere Tools. – DerMike

Verwandte Themen