2011-04-03 66 views
13

Tôi đang cố gắng make một loạt tệp trong thư mục của mình, nhưng các tệp đang tạo ~ 200 dòng lỗi, vì vậy chúng bay qua màn hình đầu cuối của tôi quá nhanh và tôi phải cuộn lên để đọc chúng.Đầu ra của chương trình đường ống đến ít hơn không hiển thị đầu ra của

Tôi muốn kết nối đầu ra hiển thị trên màn hình thành một máy nhắn tin sẽ cho phép tôi đọc các lỗi bắt đầu từ đầu. Nhưng khi tôi cố gắng

make | less 

less không hiển thị đầu ra - nó sẽ hiển thị khi kết thúc đầu ra thường được cấp nước tập trung vào màn hình, và sau đó nói với tôi đầu ra là 1 dòng dài. Khi tôi thử gõ Gg, dòng duy nhất trên màn hình là dòng của makefile được thực hiện và đầu ra màn hình thông thường biến mất.

Tôi có đang sử dụng less không chính xác không? Tôi chưa bao giờ thực sự sử dụng nó trước đây, và tôi đang gặp vấn đề tương tự với một cái gì đó như, sh myscript.sh | less nơi nó không ngay lập tức hiển thị đầu của tập tin đầu ra.

Trả lời

13

Lỗi từ make xuất hiện trên luồng lỗi chuẩn (stderr trong C), không được chuyển hướng bằng đường ống thông thường. Nếu bạn muốn nó được chuyển hướng đến less, bạn cần make |& less (csh, v.v.) hoặc make 2>&1 | less (sh, bash, v.v.).

+0

Acccha, tôi nghĩ rằng nó có cái gì đó để làm với điều đó nhưng tôi đã cố gắng 'làm | ít hơn 2> & 1'. Đã chuyển hướng ở địa điểm sai. –

+0

Bạn có thể giải thích ngắn gọn về những gì '2> & 1' và' | & 'làm không? – winklerrr

9

Đầu ra lỗi được gửi đến một địa điểm hơi khác với đường ống bình thường, vì bạn thường muốn xem lỗi nhưng không được trộn lẫn với dữ liệu bạn sẽ xử lý thêm. Đối với những thứ như thế này bạn sử dụng một chuyển hướng:

$ make 2>&1 | less 

Trong bashzsh (và csh/tcsh, đó là nơi họ đã mượn nó từ) này có thể được rút ngắn xuống còn

$ make |& less 

Với những thứ như make dễ bị tạo ra nhiều lỗi mà tôi muốn kiểm tra sau, tôi thường thu lại đầu ra vào một tệp và sau đó less tệp đó sau:

$ make |& tee make.log 
$ less make.log 
+0

Tôi đã thử sử dụng 'make | & less' trong bash, nhưng tôi gặp lỗi cú pháp. –

+0

Hrm, trông giống như 'bash' cũ hơn không có nó; hệ thống 'bash' (3.2) trên OSX không chấp nhận nó, nhưng một' bash' 4 từ MacPorts không làm như vậy và 'bash' chuẩn trên Maverick. – geekosaur

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