2010-05-17 19 views
5

Trong một môi trường Unix, tôi muốn sử dụng tee trên một chuỗi các lệnh như vậy:Unix và tee - chuỗi các lệnh

$ echo 1; echo 2 | tee file 
1 
2 

$ cat file 
2 

Tại sao file chỉ kết thúc khi có đầu ra từ lệnh cuối cùng?

Vì mục đích của cuộc thảo luận này, giả sử tôi không thể chia tách chúng ra và chạy các lệnh riêng biệt.

+0

Cũng như tạo ra một rõ ràng phụ vỏ , bạn có thể sử dụng '{echo 1; echo 2; } | tập tin tee' để có được đầu ra vào một tập tin. Lưu ý rằng '{' phải được tách biệt khỏi lệnh bằng một dấu cách và '}' phải xuất hiện khi một lệnh có thể xuất hiện (vì vậy nó là sau dấu chấm phẩy thứ hai). Cách khác là luôn luôn tạo một kịch bản lệnh mới chứa hai lệnh không thể tách rời và kết xuất đầu ra của lệnh đó thành 'tee':' dính liền-hai tiến trình | tập tin tee'. –

Trả lời

4

Hãy thử:

(echo 1; echo 2) | tee file 

Nếu không có dấu ngoặc đơn, nó nhận được phân tích cú pháp như sau:

echo 1 ; (echo 2 | tee file) 
5

Nó chỉ có đầu ra của lệnh thứ hai, vì dấu chấm phẩy biểu thị một câu lệnh mới cho trình bao.

Chỉ cần đặt chúng vào ngoặc:

(echo 1; echo 2) | tee file