Làm thế nào để tắt màu với `ls`?


50

Thông thường rất tốt khi có đầu ra màu từ ls, grepv.v. Nhưng khi bạn không muốn nó (chẳng hạn như trong tập lệnh mà bạn đang chuyển kết quả sang lệnh khác) thì có công tắc nào có thể tắt không? ls -Gbật nó lên (với một số phiên bản có nguồn gốc từ BSD ls) nếu nó không phải là mặc định, nhưng ls +Gkhông tắt. Có bất cứ điều gì khác sẽ?


4
Muộn nhưng đối với bất kỳ ai đang tìm kiếm: đối với GNU lsgrepkhi đường ống, bạn không cần phải làm gì cả vì --color=autođã tắt màu khi đầu ra của nó là một đường ống, hoặc trên thực tế là bất cứ thứ gì ngoại trừ một tty; đó là "tự động" nghĩa là gì. Tương tự FreeBSD ls -Ghoặc 'CLICOLOR' bị 'vô hiệu hóa nếu đầu ra không được hướng đến một thiết bị đầu cuối trừ khi ... CLICOLOR_FORCE ...'.
dave_thndry_085

Câu trả lời:


69

Đầu ra màu cho lsthường được kích hoạt thông qua một bí danh trong hầu hết các bản phát hành hiện nay.

$ alias ls
alias ls='ls --color=auto'

Bạn luôn có thể vô hiệu hóa bí danh tạm thời bằng cách thêm tiền tố vào dấu gạch chéo ngược.

$ \ls

Làm như trên sẽ ngắn mạch bí danh chỉ cho một lần gọi này. Bạn có thể sử dụng nó bất cứ lúc nào bạn muốn vô hiệu hóa bất kỳ bí danh nào.


3
Bạn cũng có thể sử dụng command ls, tất nhiên, nhưng điều này nhanh hơn một chút.
iconoclast

Trò hay! Phải cập nhật các tập lệnh để có ``.
Việt

1
Tôi yêu \ ls
Alex Angelico

27

Với GNU ls, bạn có thể chỉ định ls --color=nevervô hiệu hóa rõ ràng đầu ra màu. (Ngay cả khi bạn có một alias ls='ls --color=auto', khi bạn chạy ls --color=never, nó sẽ mở rộng sang ls --color=auto --color=nevervà tùy chọn sau được ưu tiên.)


1
Đây thực sự là câu trả lời mà tôi đang tìm kiếm, nhưng tôi sẽ giữ câu trả lời của slm là câu trả lời được chọn vì nó xử lý các trường hợp không phải GNU, như các phiên bản có nguồn gốc BSD (OS X, Solaris và dĩ nhiên là * BSD).
iconoclast

3

Bạn cũng có thể chỉ cần sử dụng (như trên DOS):

dir

Nó sẽ hiển thị kết quả mà không có màu, bạn có thể thêm các đối số tương tự ls, như thế nào -l.


2
alias ls=ls

hoặc là

unalias ls

Điều này vô hiệu hóa vĩnh viễn các chất màu.


3
Tất nhiên, điều này giống như giết một con ruồi bằng một khẩu súng ngắn: bạn mất tất cả các tùy chọn khác mà bạn đã thêm vào lsbí danh và bạn mất chúng trong cả phiên, thay vì chỉ một lệnh.
iconoclast

Đó là lý do tại sao tôi nói "vĩnh viễn" :-)
Slyx

2

Trong nhiều bản phân phối Linux, tính năng này được bật theo mặc định ở người dùng .bashrc.

Chỉnh sửa ~/.bashrcvà xóa dòng trông giống như:

alias ls='ls --color=auto'

Nếu bạn muốn tắt tính năng này cho tất cả các tài khoản mới được tạo trên máy này trong tương lai, hãy xóa cùng một dòng khỏi:

/etc/skel/.bashrc 

1

Trên Centos7, điều này đang được đặt trong /etc/profile.d/colorls.sh... 3 dòng cuối cùng của tập lệnh này là:

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

Nếu bạn có mong muốn và các quyền ... bình luận ra dòng không mong muốn thì nên thực hiện thủ thuật.


Hoặc unalias ls ll ltrong bạn .bashrcnếu bạn không có quyền
avsej

0

Để tắt màu: unalias ls

Để bật màu: bí danh ls = 'ls --color = auto'

Để tạm thời tắt màu: \ ls -ltr


0

Có thể có một cái gì đó khác đang diễn ra. lskhông nên sử dụng màu sắc trừ khi nó nghĩ rằng nó được kết nối với một cái gì đó tương tác. Nó không nên tô màu mọi thứ khi bạn chuyển sang chương trình khác.

Một bí danh nói chung là một ý tưởng tồi bởi vì bạn không bao giờ có thể thoát khỏi tùy chọn đó và bạn đã quen với các cài đặt cá nhân mà bạn có thể không thể mang theo bên mình đến một số máy khác mà bạn phải làm việc. Nếu bạn cần tắt nó để chuyển nó sang một cái gì đó khác, hãy sử dụng công tắc trong đường ống đó. Nhưng, màu sắc không nên có trong một đường ống.

Để lsxem, nếu bạn hỗ trợ LS_COLORSbiến môi trường. Các trapd00r / LS_COLORS show cho bạn cách THT hoạt động. dircolors cho phép bạn điều chỉnh màu sắc một cách tinh tế và theo từng loại tệp. Nếu bạn không cài đặt LS_COLORSnhưng bật màu, lssẽ thực hiện một loạt các lệnh gọi hệ thống để tìm ra các loại tệp và thuộc tính để nó có thể tìm ra những gì cần tô màu mọi thứ. Những người đứng sau Sherlock nhận thấy rằng thiết lập LS_COLORScó thể tránh được tất cả những điều đó và giúp cải thiện tốc độ 40 lần . Đọc chi tiết tin đồn của họ để xem những gì họ tìm thấy.

Tôi làm cho tất cả các loại tệp sử dụng màu mặc định:

$ export LS_COLORS='bd=0:ca=0:cd=0:di=0:do=0:ex=0:pi=0:fi=0:ln=0:mh=0:no=0:or=0:ow=0:sg=0:su=0:so=0:st=0:tw=0:'

Đây là tệp LS_COLORS mà tôi đã cung cấp cho dircolors:

BLK                   0
CAPABILITY            0
CHR                   0
DIR                   0
DOOR                  0
EXEC                  0
FIFO                  0
FILE                  0
LINK                  0
MULTIHARDLINK         0
NORMAL                0
ORPHAN                0
OTHER_WRITABLE        0
SETGID                0
SETUID                0
SOCK                  0
STICKY                0
STICKY_OTHER_WRITABLE 0

Đối với grep, xem nếu bạn hỗ trợ GREP_COLORShoặc GREP_OPTIONS.


Lưu ý rằng điều này vẫn tạo lsra các chuỗi thoát đầu ra GNU cho các màu được chọn. So sánh đầu ra của ls --color=always | od -als --color=never | od -avới cài đặt này LS_COLORS.
Kusalananda

Bí quyết thực sự là ls | od -akhông phát ra lối thoát, và đó là điều tôi muốn. Chỉ lsnên phát ra các chuỗi đó khi nó gửi đầu ra đến một thiết bị đầu cuối. Nếu bạn nói với nó, mặc dù, chắc chắn rằng nó sẽ làm điều đó. Vì vậy, đừng làm điều đó.
brian d foy

-1

thêm vào câu trả lời của @ brian-d-foy, hầu hết thời gian có một màu khó chịu đơn giản mà bạn muốn thay đổi màu xanh vô hình của thư mục hoặc màu xanh lá cây hào nhoáng của "Other_WRITABLE", vì vậy hãy sử dụng 24- của chúng tôi hiển thị bit :)

export LS_COLORS='di=04;01;38;5;33:ow=04;01;38;5;33;48;2;60;10;0'

để xác định lại chỉ màu thư mục và màu khác có thể ghi của nó

04: underline;
01: bold/brighter;
38;5;33: redifined-blue;
48;2;60;10;0: dark red background

đọc thêm về de ANSI


1
Câu hỏi trong tầm tay là về việc loại bỏ tất cả các màu khỏi đầu ra của GNU ls, không phải về cách thay đổi các màu riêng lẻ.
Kusalananda

ok, làm thế nào về việc "tắt một màu cụ thể bằng 'ls' với: export LS_COLORS = 'ow = 00' để chỉ tắt KHÁC_WRITABLE.
Iggy Lake
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.