Tùy chọn --color = auto cho GNU grep có nghĩa là gì?


14

AFAICT, không phải trang man cho GNU grep, cũng không được info grepthiết kế để đánh vần --color=autolà gì .

Tôi phải là một trong số rất ít người trên hành tinh mà ý nghĩa của lựa chọn này không rõ ràng ngay lập tức.

Tôi phỏng đoán rằng --color=auto"là SOMEWHERE ở giữa" --color=never--color=always, nhưng điều đó vẫn còn quá nhiều điều chưa được xác định.

Câu trả lời:


14

Các quy tắc tương tự như đối với ls, đó là một công việc tốt hơn ghi lại nó trong man ls. Trích dẫn:

Sử dụng màu sắc để phân biệt các loại tệp bị tắt theo mặc định và
với --color = never. Với --color = auto, ls chỉ phát ra mã màu khi
đầu ra tiêu chuẩn được kết nối với thiết bị đầu cuối.
Biến môi trường LS_COLORS có thể thay đổi cài đặt. Sử dụng lệnh dircolors để thiết lập nó.

Vì vậy, nó sẽ làm cho lệnh chỉ thêm định dạng màu khi đầu ra đi đến một thiết bị đầu cuối và không, giả sử, khi nó đi đến một đường ống nơi chương trình tiêu thụ đường ống có thể không xử lý tốt định dạng màu.


3
Phải, thời gian chính tôi gặp phải điều này là ít hơn. Nếu bạn sử dụng, less -Rbạn có thể làm nổi bật trận đấu nhưng bạn cần chỉ định --color=alwaysgrep để nó hoạt động.
Holloway

10

greplà một chương trình GNU nên một tùy chọn khác có thể có một cái nhìn về mã nguồn.


Grep nội bộ kiểm tra static int color_optioncho một trong hai 0, 1hoặc 2.

  • 0 không bao giờ sử dụng đầu ra màu
  • 1 luôn luôn sử dụng màu sắc
  • 2 Chỉ sử dụng màu sắc khi in tới thiết bị đầu cuối

Bây giờ khi bạn bàn giao --color=autocho grep làm đối số trên CLI của mình, nó sẽ đặt biến bên trong color_optionthành 2.

Nếu color_optionbằng 2 grepthì kiểm tra thêm xem có STDOUTđược liên kết với một thiết bị đầu cuối hoặc người dùng bị vô hiệu hóa kết xuất màu qua shell environment variables. Nếu cái trước là đúng và đầu ra màu được cho phép, grepthì tiếp tục với việc đánh giá màu nào sẽ được sử dụng và cuối cùng cuối cùng sẽ in ra CLImàu của bạn .


nguồn: (grep 2.21)

grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty 
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.