Không có đầu ra màu trong ít hơn cho lệnh ls


21

Nếu tôi chạy, lstôi nhận được đầu ra màu mà tôi thấy khá tiện dụng để nhanh chóng xem qua loại tệp. Khi tôi cố gắng chuyển nó sang lessngay cả với -r-Rcờ, màu luôn bị mất. Tôi đang sử dụng zshphiên bản 5.0.7. Có ý kiến ​​gì không? Cảm ơn.

chỉnh sửa: Tôi đang dùng OS X.


Bạn có thể xác nhận lsđang được viện dẫn với --color? Hãy thử tạm dừng đường ống ( ^Z) hoặc sử dụng pstừ thiết bị đầu cuối khác. Sản lượng nào which lssản xuất?
zackse

Tôi đã xóa điều này khỏi hàng đợi gần vì OP đã tuyên bố rõ ràng rằng họ đang sử dụng less -rvì vậy nó không phải là vấn đề với lessnhưng vớils
terdon

Tôi ngạc nhiên rằng đây chưa phải là một bản sao, nhưng gần nhất tôi có thể tìm thấy là đầu ra lệnh Store trong biến và đó là trên Super User.
Scott

@Scott Tôi không chắc có trùng lặp chính xác không, nhưng có một số câu hỏi cho câu trả lời rất giống nhau ( lskết quả phụ thuộc vào thiết bị xuất chuẩn). Cái tôi nhớ là unix.stackexchange.com/questions/157285/ , bản thân nó được đánh dấu là bản sao của unix.stackexchange.com/questions/10421/ trộm
jimmij 18/215

@jimmij Nhưng những câu hỏi đó không đề cập đến điều đó ls --color=autocó nghĩa là chỉ sử dụng màu khi ghi vào thiết bị đầu cuối (nghĩa là khi đầu ra tiêu chuẩn là thiết bị đầu cuối), chứ không phải khi đó là tệp hoặc đường ống.
Scott

Câu trả lời:


21

Đây là theo thiết kế: các chương trình tạo đầu ra màu thường chỉ làm như vậy khi đầu ra của chúng đi đến một thiết bị đầu cuối, không phải khi nó được gửi đến một đường ống hoặc đến một tệp thông thường. Lý do là dữ liệu được gửi trên thiết bị đầu cuối có thể được đọc bởi con người, trong khi dữ liệu được dẫn đến một chương trình hoặc được ghi vào một tệp có khả năng được phân tích cú pháp bởi một số chương trình, vì vậy nó không nên chứa nội dung bên ngoài như các chuỗi thoát thay đổi màu .

GNU lshiển thị đầu ra màu trên thiết bị đầu cuối khi bạn vượt qua tùy chọn --color(hoặc --color=auto). Để buộc đầu ra màu bất kể loại tệp của đầu ra tiêu chuẩn, vượt qua --color=alwayshoặc --color=yes(chúng là từ đồng nghĩa). Quy ước này đã được tuân theo bởi các lệnh khác, như GNU grep, FreeBSD grep git diff, v.v.

ls --colors=yes -l | less

Với phiên bản FreeBSD của ls(cũng được tìm thấy trên OSX và có sẵn dưới dạng colorlscổng trên OpenBSD và NetBSD), hãy chuyển tùy chọn -Gđể hiển thị màu khi đầu ra là thiết bị đầu cuối. Đặt môi trường CLICOLOR_FORCEđể hiển thị màu sắc bất kể loại tệp đầu ra.

CLICOLOR_FORCE=1 ls -l | less

20

Vấn đề rất có thể là lschương trình của bạn đã đặt tùy chọn --color=auto, về cơ bản có nghĩa là đầu ra chỉ được tô màu nếu nó được kết nối với thiết bị đầu cuối, nếu không (đầu ra được kết nối với một đường ống hoặc một tệp) không có màu nào được phát ra.

Nếu bạn muốn có màu sắc là những trường hợp như vậy, bạn nên đặt --colortùy chọn thành always, vì vậy hãy thử

ls --color=always | less -R

Nếu hành vi này là những gì bạn mong đợi mọi lúc thì chỉ cần tạo bí danh:

alias ls='ls --color=always'

Trong thiết lập của tôi, bash phiên bản 4.3, --color là một tùy chọn bất hợp pháp .. Cắt xén cho "màu" cho tôi biết về tùy chọn "-G" nhưng không nói gì về tùy chọn tự động hoặc luôn luôn. Có ý kiến ​​gì không?
nunos

5
@nunos lskhông đến từ bash, nó là chương trình độc lập. Chạy ls --versionđể kiểm tra phiên bản của nó. Của tôi là ls GNU coreutils) 8.21 .
jimmij

@jimiij lsphiên bản của tôi không có --versioncờ. Tôi đang sử dụng cái mặc định từ OS X, không chắc điều đó có giúp ích gì không.
nunos

@nunos hãy luôn đề cập đến hệ điều hành của bạn. Có sự khác biệt rất lớn giữa Linux và các loại không phải GNU như OSX.
terdon

0

Tôi không thể nhận xét câu trả lời của @jimmij, vì tôi có ít hơn 50 đại diện, nhưng tôi muốn giải thích những gì làm việc cho tôi ở Bash.

Nếu bạn chạy

$ man ls | grep color

bạn sẽ thấy tất cả các mục của trang mancho môi trường shell cụ thể của bạn (trong trường hợp của chúng tôi bash).

Đối với tôi, sự điều chỉnh sau đây đã thực hiện thủ thuật:

$ alias ls='ls -G'

3
Điều đó làm việc để làm gì? Các -Gcờ không có gì để làm với cách lsquản lý sản lượng màu của nó. Điều đó chỉ loại bỏ các nhóm từ đầu ra của ls -l. Nó không ảnh hưởng đến đầu ra màu trong BSD ls (cũng được sử dụng trên OSX), đó có phải là ý bạn không? Trong mọi trường hợp, tôi không nghĩ rằng nó sẽ hiển thị màu khi được chuyển hướng đến một tệp, nó sẽ chỉ hiển thị màu trên dòng lệnh.
terdon
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.