Đường ống đầu ra của ls hoặc cây để mất màu?


12

treelscó thể phân biệt các loại tệp bằng cách tô màu tên tệp khác nhau.

treelsthường xuất ra một danh sách dài các tệp (bao gồm các thư mục), vì vậy tôi dẫn đầu ra xuất chuẩn less.

Nhưng lesskhông giữ được màu sắc. Làm thế nào chúng ta có thể làm cho nó hiển thị màu sắc, hoặc một số cách khác?

Chỉ thấy danh sách được liên kết, nhưng đường ống đến less -Rhoặc less -rkhông hoạt động. Hệ điều hành của tôi là Ubuntu 12.04. lesslà phiên bản 444: 09 tháng 6 năm 2011.


1
@JosephR. câu hỏi khác liên quan đến một nửa nhưng không trùng lặp. Ở đây chúng ta đang nói ls(không phải tree) mà một số triển khai cần được nói để buộc đầu ra màu khi đầu ra không đi đến một thiết bị đầu cuối (ngoài less -Rviệc cần thiết)
Stéphane Chazelas

Bạn đã thử tree -C | less -Rchưa Các -Ctùy chọn là cây của tương đương của ít --color=always, tôi nghĩ (ít nhất là nó làm việc cho tôi, trên Ubuntu 12.04).
Steeldo

@steel ấn cảm ơn. nó hoạt động treecó và không có -Cmột mình luôn luôn xuất ra màu sắc, nhưng tại sao chúng khác nhau khi được sử dụng với less?
Tim

@ Tim 2 lý do: 1. lessloại bỏ các màu sắc theo mặc định trừ khi bạn cho nó trở thành -Rlựa chọn, mà nói với nó để lại nó trong, và 2. treelsvà các chương trình khác thường biến màu tắt khi họ phát hiện ra họ sẽ một chương trình khác (như less) thay vì trực tiếp đến thiết bị đầu cuối của bạn, trừ khi bạn buộc tô màu bằng -Choặc --color=always.
jw013

2
Danh sách liên kết này bạn viết về cái gì?
Anthon

Câu trả lời:


15

Tôi sẽ giả sử bạn đang sử dụng ls --color=auto, điều này cho biết lssử dụng màu sắc ở chế độ 'tự động'. Chế độ 'Tự động' cho biết lessliệu STDOUT có phải là thiết bị đầu cuối không và nếu có, hãy sử dụng màu, nếu không thì không sử dụng màu. Khi bạn ống lsvào less, STDOUT không phải là một thiết bị đầu cuối, nó kết nối với STDIN của less, mà là một đường ống bình thường.

Các giải pháp, sử dụng ls --colorhoặc ls --color=always.

Tuy nhiên bây giờ điều này dẫn đến một vấn đề tiềm năng khác. Tùy thuộc vào bạn less, nó có thể không hiển thị màu, nhưng thay vào đó hiển thị mã thoát. Giải pháp là sử dụng less -R. Điều này nói lessđể vượt qua các mã thoát cho thoát màu ANSI. Bạn không muốn sử dụng -rvì điều này sẽ gây ra vấn đề với các dòng dài bao quanh, vì ít hơn không tính đúng chiều dài dòng.

Giải pháp đầy đủ:

ls --color | less -R

Tương tự cho tree:

tree -C | less -R
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.