2012-05-22 36 views
5

Tôi mới sử dụng lệnh tee.Sử dụng lệnh tee ngay lập tức ngay cả đối với một lệnh

Tôi đang cố gắng chạy một trong các chương trình của mình mất nhiều thời gian để hoàn thành nhưng nó in ra thông tin khi nó tiến triển. Tôi đang sử dụng 'tee' để lưu đầu ra vào một tập tin cũng như để xem đầu ra trong vỏ (bash).

Nhưng vấn đề là tee không chuyển tiếp đầu ra cho đến khi kết thúc lệnh của tôi. Có cách nào để làm điều đó không?

Tôi đang sử dụng Debian và bash.

Trả lời

3

Điều này thực sự phụ thuộc vào số lượng đầu ra và việc thực hiện bất kỳ lệnh nào bạn đang chạy. Không có chương trình nào có nghĩa vụ phải in trực tiếp các công cụ stdout hoặc stderr và xả nó mọi lúc. Vì vậy, mặc dù phần lớn thời gian chạy C thực thi sau khi một lượng dữ liệu nhất định được viết bằng cách sử dụng một trong các thường trình thời gian chạy, chẳng hạn như printf, điều này có thể không đúng tùy thuộc vào việc triển khai.

tee không xuất nó ngay lập tức, nó có khả năng chỉ nhận được đầu vào ở cuối của lệnh của bạn. Nó có thể hữu ích khi đề cập đến lệnh chính xác nào.

+0

Bạn đã đề cập đến một điểm tuyệt vời! Tôi quên mất việc xả nước. Lệnh này là một trong những chương trình C của riêng tôi. Tôi đã thêm fflush sau printf của mình. Bây giờ nó hoạt động. Cảm ơn bạn rất nhiều vì đã giúp đỡ nhanh chóng. – Rakib

+0

@Rakib Hasan: vui vì nó hoạt động cho bạn bây giờ. Đó là một hành vi bị bỏ qua, cũng bằng nhiều ngôn ngữ kịch bản khác nhau. – 0xC0000022L

0

Nếu bạn đã gửi sử dụng của bạn tôi có thể cung cấp cho một câu trả lời tốt hơn, nhưng vì nó là

(for i in `seq 10`; do echo $i; sleep 1s; done) | tee ./tmp 

là việc sử dụng đúng đắn của lệnh tee và dường như để làm việc. Thay thế các phần trước khi đường ống với lệnh của bạn và bạn nên được tốt để đi.

1

Sự cố bạn gặp phải có thể liên quan đến bộ đệm. Bạn có thể xem lệnh stdbuf, thực hiện như sau:

stdbuf - Chạy COMMAND, với các hoạt động đệm đã sửa đổi cho luồng chuẩn của nó.

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