2011-12-23 28 views
6

Cấu trúc trong bash được gọi là nơi bạn có thể thực hiện một lệnh kết xuất thành stdout, sao cho đầu ra được xử lý giống như một luồng? Trong trường hợp tôi không mô tả tốt như vậy, có thể ví dụ sẽ làm tốt nhất, và đây là những gì tôi thường sử dụng để: áp dụng diff cho đầu ra không đến từ một tệp, nhưng từ các lệnh khác, trong đóCấu trúc Bash (và/hoặc trình bao khác?) Này được gọi là gì?

cmd 

được gói như

<(cmd) 

By gói một lệnh theo cách như vậy, trong ví dụ dưới đây, tôi xác định rằng có một sự khác biệt của một giữa hai lệnh mà tôi đang chạy, và sau đó tôi có thể để xác định rằng một sự khác biệt chính xác. Cấu trúc/kỹ thuật bao bọc lệnh là < (cmd) được gọi là gì? Cảm ơn

[[email protected] v6.5 html]$ git status | egrep modified | awk '{print $3}' | wc -l 
51 
[[email protected] v6.5 html]$ git status | egrep modified | awk '{print $3}' | xargs grep -l 'Ext\.define' | wc -l 
50 
[[email protected] v6.5 html]$ diff <(git status | egrep modified | awk '{print $3}') <(git status | egrep modified | awk '{print $3}' | xargs grep -l 'Ext\.define') 
39d38 
< javascript/reports/report_initiator.js 

PHỤ LỤC Lệnh sửa đổi bằng cách sử dụng những lời khuyên cho việc sử dụng ls-file git nên thực hiện như sau (chưa được kiểm tra):

diff <(git ls-files -m) <(git ls-files -m | xargs grep -l 'Ext\.define') 
+5

Không phân tích cú pháp 'git status', sử dụng' git ls-files -m'! – Mat

+0

Cảm ơn git tip, làm việc như một nét duyên dáng –

+1

Nó được gọi là một abomination. ;) –

Trả lời

6

này được gọi là Process Substitution

+0

Tôi chấp nhận câu trả lời khác mặc dù bạn giống hệt nhau vì người dùng đó cũng cho tôi một mẹo git hữu ích, hy vọng bạn hiểu, tôi đã tự hỏi làm thế nào tôi sẽ chọn giữa hai câu trả lời đồng thời giống hệt nhau –

+0

Vâng, không hoàn toàn đồng thời, tôi ' d bị đánh bại Mat khoảng 30 giây, nhưng chỉ vì anh ta giúp bạn với vấn đề của bạn, không phải với câu hỏi của bạn. Đoán đó là công bằng. – MattH

+0

Vâng tôi thấy bây giờ cuối cùng tôi có một màn hình nói rằng bạn đã trả lời 14 phút trước, và Mat cách đây 13 phút –

1

Đây là quá trình thay thế, như bạn đã được thông báo. Tôi chỉ muốn chỉ ra rằng điều này cũng hoạt động theo một hướng khác. Việc thay thế tiến trình bằng> (cmd) cho phép bạn thực hiện một lệnh ghi vào một tệp và thay vào đó, đầu ra đó được chuyển hướng đến một lệnh stdin khác. Nó rất hữu ích cho việc chèn một cái gì đó vào một đường ống dẫn lấy tên tệp đầu ra làm đối số. Bạn không thấy nó nhiều bởi vì hầu hết các lệnh tiêu chuẩn sẽ viết để stdout đã có, nhưng tôi đã sử dụng nó thường xuyên với các công cụ tùy chỉnh. Dưới đây là ví dụ giả tạo:


$ echo "hello world" | tee >(wc) 
hello world 
     1  2  12 
Các vấn đề liên quan