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