Apakah ada halaman manual untuk keluaran shell berwarna?

23

Anda tahu, keluaran berwarna yang dibuat oleh urutan char khusus, misalnya:

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

Ini akan menghasilkan kata "Halo" berwarna biru. Untuk melakukan ini saya harus mencari di web, dan itu sulit, karena sumber yang berbeda mungkin mengatakan sesuatu yang berbeda. Saya pikir, pasti ada beberapa manual, tetapi saya tidak dapat menemukannya. Bahkan dengan apropos coloratau yang serupa. Jadi, pertanyaannya adalah - di mana saya dapat menemukan manual yang dapat diandalkan?

Sergius
sumber
2
Anda sedang mencari dokumentasi tentang kode pelarian ANSI. (Saya cenderung menggunakan halaman Wikipedia ketika saya perlu mencarinya.)
chepner
Perhatikan bahwa Anda tidak perlu mengetahui urutan pelarian itu. Beberapa cangkang (setidaknya tcsh, zsh, ikan) telah membangun dukungan untuk menghasilkan warna tanpa harus secara eksplisit menulis urutan tersebut.
Stéphane Chazelas

Jawaban:

27

Ada terlalu banyak sumber informasi untuk dicantumkan di halaman ini:

  • Perintah echo -emenggunakan ekstensi untuk merender \esebagai ASCII 27 (oktal 33 atau "\ 033"). Cara portabel untuk mencetak penggunaan ini printf(POSIX). Bandingkan dengan standar echo(POSIX).
  • Contoh Anda dapat ditulis ulang sebagai

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

  • standar untuk warna lolos adalah ECMA-48 (Fungsi Kontrol untuk Set Karakter Coded).
  • Dalam ECMA-48, 8.3.117 SGR - SELECT GRAPHIC RENDITION mencantumkan urutan kontrol untuk pengaturan 8 warna latar depan dan 8 warna latar belakang.
  • Itu juga mencantumkan kode 39/49 "warna tampilan default (implementasi-ditentukan)" dan 38/48 "dicadangkan untuk standardisasi masa depan; dimaksudkan untuk pengaturan warna foreground karakter seperti yang ditentukan dalam ISO 8613-6 [Rekomendasi CCITT T.416]". Artinya, ada rekomendasi dari organisasi lain tetapi itu tidak (sejauh ini, setelah 24 tahun) menjadi bagian dari standar.
  • Setelah membacanya dengan cermat, Anda mungkin memperhatikan bahwa standarnya tidak jelas di banyak tempat, sehingga memungkinkan interpretasi yang berbeda. Ini menjelaskan sintaks dari urutan kontrol ini tetapi tidak menggambarkan perilaku mereka . Untuk itu, Anda harus pergi ke dokumentasi untuk masing-masing terminal.
  • dokumentasi untuk xterm ditemukan dalam XTerm Control Sequences , yang mengasumsikan keakraban dengan dokumentasi DEC yang ditemukan di http://vt100.net
  • untuk terminal lain, halaman manualnya dapat menyebutkan kontrol (seperti yang dilakukan untuk konsol Linux di console_codes ).
  • terminal lain mendokumentasikan diri mereka sebagai "xterm"; untuk diskusi, lihat xterm FAQ Membandingkan versi, dengan menghitung kontrol . Untungnya, kontrol warna sebagian besar kompatibel (tetapi lihat FAQ ncurses Terminal saya menunjukkan beberapa ruang yang tidak berwarna ).
  • Anda juga dapat membaca halaman manual untuk tput, yang memungkinkan Anda untuk menggunakan terminfokemampuan dalam skrip shell. Contoh Anda dapat ditulis ulang sebagai

    printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
    
  • beberapa sumber seperti Bash Prompt HOWTO dan Advanced Bash-Scripting Guide menyebutkan warna, tetapi (bahkan ini) sebagai aturan memiliki celah dan kelalaian dan tidak membantu sehubungan dengan ECMA-48.

  • sebagian besar sumber lain yang akan Anda temukan dengan salinan penelusuran web dari sumber lain (seperti yang dikutip), dll., dan sebagai aturan, kurang memperhatikan standar aktual.
Thomas Dickey
sumber
Bagian yang relevan dalam ECMA-48 tampaknya 8.3.117 - "SGR - SELECT GRAPHIC RENDITION". Itu hanya menyebutkan kata "biru", dan kode yang ditemukan di sana berfungsi setidaknya di XTerm saya.
l0b0
ya - saya akan menambahkan klarifikasi.
Thomas Dickey
2
Ini jawaban yang sangat bagus - semoga semua jawaban seperti milik Anda
Sergius
1
xterm juga mendukung mode 256-warna, mungkin ini didokumentasikan dalam salah satu manual di atas.
sendmoreinfo
Lihat wynnnetherland.com/journal/... untuk banyak info berguna termasuk paket grc yang dapat melakukan segala macam pewarnaan dengan keluaran perintah.
Joe