Có bất kỳ trang hướng dẫn cho đầu ra vỏ màu?


23

Bạn biết đấy, đầu ra được tô màu được tạo bởi các chuỗi char đặc biệt, ví dụ:

echo -e "\e[34m Hello\n \e[0m"

Điều này sẽ tạo ra từ "Hello" được tô màu xanh lam. Để làm điều này tôi đã phải tìm kiếm trên web, và thật khó, bởi vì các nguồn khác nhau có thể nói điều gì đó khác nhau. Tôi nghĩ rằng phải có một số hướng dẫn, nhưng tôi không thể tìm thấy chúng. Ngay cả với apropos colorhoặc một cái gì đó tương tự. Vì vậy, câu hỏi là - nơi tôi có thể tìm thấy hướng dẫn sử dụng đáng tin cậy?


2
Bạn đang tìm tài liệu về mã thoát ANSI. (Tôi có xu hướng sử dụng trang Wikipedia khi tôi cần tìm kiếm.)
chepner

Lưu ý rằng bạn không nhất thiết phải biết những chuỗi thoát đó. Một số shell (tcsh, zsh, fish ít nhất) có hỗ trợ dựng sẵn để xuất ra màu sắc mà không cần phải viết rõ ràng các chuỗi đó.
Stéphane Chazelas 7/11/2015

Câu trả lời:


27

Có quá nhiều nguồn thông tin để liệt kê trong trang này:

  • Lệnh echo -esử dụng một phần mở rộng để hiển thị \edưới dạng ASCII 27 (bát phân 33 hoặc "\ 033"). Cách di động để in những sử dụng này printf(POSIX). So sánh với tiêu chuẩn echo(POSIX).
  • Ví dụ của bạn có thể được viết lại thành

    printf "\033[34m Hello\n \033[0m"

  • tiêu chuẩn cho các màu thoát là ECMA-48 (Các hàm điều khiển cho các bộ ký tự được mã hóa).
  • Trong ECMA-48, 8.3.117 SGR - CHỌN LỰA CHỌN GRAPHIC liệt kê các chuỗi điều khiển để thiết lập 8 màu nền trước và 8 màu nền.
  • Nó cũng liệt kê các mã 39/49 "màu hiển thị mặc định (được xác định theo triển khai)" và 38/48 "dành riêng cho tiêu chuẩn hóa trong tương lai, dành cho cài đặt màu nền trước của ký tự như được chỉ định trong ISO 8613-6 [Khuyến nghị CCITT T.416]". Đó là, có một khuyến nghị của một tổ chức khác nhưng nó không (cho đến nay, sau 24 năm) là một phần của tiêu chuẩn.
  • Đọc kỹ, bạn có thể nhận thấy rằng tiêu chuẩn này rất mơ hồ ở nhiều nơi, cho phép các cách hiểu khác nhau. Nó mô tả cú pháp của các chuỗi điều khiển này nhưng không mô tả hành vi của chúng . Đối với điều đó, bạn phải đi đến tài liệu cho các thiết bị đầu cuối tương ứng.
  • tài liệu về xterm được tìm thấy trong Trình tự điều khiển của XTerm , trong đó giả sử có sự quen thuộc với tài liệu DEC được tìm thấy trên http://vt100.net
  • đối với các thiết bị đầu cuối khác, các trang thủ công của chúng có thể liệt kê các điều khiển (như được thực hiện cho bảng điều khiển Linux trong console_codes ).
  • các thiết bị đầu cuối khác tự ghi là "xterm"; để thảo luận, hãy xem xterm FAQ So sánh các phiên bản, bằng cách đếm các điều khiển . May mắn thay, các điều khiển màu chủ yếu là tương thích (nhưng hãy xem Câu hỏi thường gặp về thiết bị đầu cuối của tôi hiển thị một số khoảng trắng không màu ).
  • bạn cũng có thể đọc các trang hướng dẫn tput, cho phép bạn sử dụng các terminfokhả năng trong tập lệnh shell. Ví dụ của bạn có thể được viết lại thành

    printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
    
  • một số nguồn như Bash Prompt HOWTOHướng dẫn Bash-Scripting nâng cao đề cập đến màu sắc, nhưng (ngay cả những nguồn này) như một quy tắc có những khoảng trống và thiếu sót và không hữu ích đối với ECMA-48.

  • hầu hết các nguồn khác mà bạn sẽ tìm thấy với một bản sao tìm kiếm trên web từ các nguồn khác (chẳng hạn như các nguồn được trích dẫn), v.v., và như một quy tắc ít chú ý đến tiêu chuẩn thực tế.

Phần có liên quan trong ECMA-48 dường như là 8.3.117 - "SGR - CHỌN LỰA CHỌN HÌNH ẢNH". Nó có đề cập duy nhất của từ "màu xanh" và các mã được tìm thấy ở đó hoạt động ít nhất trong Xterm của tôi.
l0b0

có - tôi sẽ thêm một sự làm rõ.
Thomas Dickey

2
Đó là câu trả lời thực sự tuyệt vời - chúc tất cả các câu trả lời giống như của bạn
Sergius

1
xterm cũng hỗ trợ chế độ 256 màu, có lẽ điều này được ghi lại trong một trong những hướng dẫn ở trên.
sendmoreinfo

Xem wynnnetherland.com/journal/ đá để biết một loạt thông tin hữu ích bao gồm gói grc có thể thực hiện tất cả các loại màu sắc với đầu ra lệnh.
Joe
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.