2010-11-06 30 views
13

Tôi không muốn tạo tệp mới. Tôi muốn thực hiện điều gì đó tương tự như:Làm cách nào để so sánh đầu ra của hai lệnh unix để tìm sự khác biệt?

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

nhưng không sử dụng tệp a và b.

+0

Related: [Diff đầu ra từ hai chương trình không có tệp tạm thời] (http://stackoverflow.com/questions/3800202/diff-output-from-two-programs-without-temporary-files), [Làm cách nào để phân biệt đầu ra của hai lệnh?] (http://askubuntu.com/questions/229447/how-do-i-diff-the-output-of-two-commands) – kenorb

Trả lời

28

Tiện ích Unix thường được định hướng tệp, vì vậy không có gì hoàn toàn làm những gì bạn muốn.

Tuy nhiên, zsh thể autocreate tập tin tạm thời với cú pháp sau:

diff =(cmd1) =(cmd2)

Nó cũng có thể tạo đường ống được đặt tên tạm thời (hoặc sử dụng các tập tin đặc biệt /dev/fdn để tham khảo ống nặc danh) với

diff <(cmd1) <(cmd2)

Tuy nhiên, nhiều cuộc gọi diff s gọi lseek() trên đầu vào của họ, vì vậy sẽ không hoạt động với các đường ống có tên.

(diff là trong một lệnh hữu ích hơn chung để so sánh sản lượng rất giống so với đường ống của bạn ở trên.)

Hãy xem phần "thay thế tiến trình" của "zshexpn" man page để biết thêm chi tiết.

+8

Cú pháp '<(cmd)' là khá một tiêu chuẩn cũng được hỗ trợ bởi các shell được sử dụng rộng rãi hơn như bash. Tôi đã sử dụng điều này với sự khác biệt trong quá khứ mà không nhận thấy bất kỳ vấn đề. – Porculus

+0

Và, tất nhiên, điều này không chỉ từ với 'diff'. Tôi sử dụng nó cho 'vimdiff' và các công cụ khác. – DerMike

Các vấn đề liên quan