2010-11-06 13 views
13

Wolę nie tworzyć nowych plików. Chcę wykonać coś podobnego do:Jak mogę porównać wyjście dwóch poleceń uniksowych, aby znaleźć różnicę?

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

, ale bez użycia plików aib.

+0

Powiązane: [Diff wyjście z dwóch programów bez plików tymczasowych] (http://stackoverflow.com/questions/3800202/diff-output-from-two-programy-z bez -programów-współczesnych), [Jak odróżnić wynik dwóch poleceń?] (http://askubuntu.com/questions/229447/how-do-i-diff-the-output-of-two-commands) – kenorb

Odpowiedz

28

Programy narzędziowe Unix są ogólnie zorientowane na plik, więc nic nie robi, co chcesz.

Można jednak zsh Autocreate pliki tymczasowe z następującą składnią:

diff =(cmd1) =(cmd2)

Można również utworzyć tymczasowego nazwanych potoków (lub użyć specjalnych plików /dev/fdn odwołać rur anonimowych) z

diff <(cmd1) <(cmd2)

Jednak wiele połączeń diff dzwoni lseek(), więc nie będzie działać z nazwanymi potokami.

(diff jest na ogół bardziej użytecznego polecenia do porównywania bardzo podobny wynik niż rurociągu powyżej).

Zobacz sekcję „podstawienie” proces z „zshexpn” manualu więcej szczegółów.

+8

Składnia '<(cmd)' jest dość standardowy, który jest również obsługiwany przez szerzej używane powłoki, takie jak bash. Używałem tego z diff w przeszłości, nie zauważając żadnych problemów. – Porculus

+0

I, oczywiście, nie chodzi tylko o słowo "diff". Używam go również do 'vimdiff' i innych narzędzi. – DerMike

Powiązane problemy