GNU/Linux >> Belajar Linux >  >> Linux

Apakah Urutan Escape Warna Terminal Ditetapkan Di Mana Saja Untuk Bash?

Saya sering menggunakan warna dalam skrip Bash (kebanyakan di CentOS), tetapi untuk membuat penggunaannya lebih nyaman, saya akhirnya mendefinisikan ulang variabel ke nilai warna:

local GRAY="\[\033[1;30m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local CYAN="\[\033[0;36m\]"
local LIGHT_CYAN="\[\033[1;36m\]"
local NO_COLOUR="\[\033[0m\]"

atau juga dengan tput :

bold=`tput bold`
normal=`tput sgr0`
whitef=`tput setaf 7`
greenf=`tput setaf 2`
redb=`tput setab 1`

Saya telah memahami /etc/rc.d/init.d direktori tetapi tidak menemukan apa pun yang terkait dengan definisi warna di sana.

Apakah definisi seperti itu sudah ada? Jika tidak, saya akan memasukkannya ke dalam file /etc/rc.d/init.d misalnya, dan memasukkannya ke dalam skrip saya, sedikit seperti dengan /etc/rc.d/init.d/functions

Jawaban yang Diterima:

Ada beberapa aspek yang berperan dalam pertanyaan Anda.

Pertama, bash tidak mendefinisikan warna. Sebenarnya bash sama sekali tidak tahu bahwa warna itu ada. Yang ia tahu hanyalah bahwa Anda menyuruhnya untuk menampilkan karakter \033[0;36m . Emulator terminal Anda (xterm, gnome-terminal, apa pun) menerima karakter ini dan memahami "Saya harus mulai mengeluarkan dalam cyan".

Jadi emulator terminal Anda yang mengerti warna. Emulator terminal Anda memahami bahwa \033[0;36m adalah cyan, tetapi emulator terminal lain mungkin menggunakan rangkaian karakter yang sama sekali berbeda untuk cyan (meskipun tidak ada emulator terminal waras yang akan memamerkan standar dan melakukan ini). Ini adalah alasan untuk tput . Saat Anda menjalankan tput setaf 6 , tput akan mencari kode escape terminal Anda untuk warna 6 (cyan), dan mengeluarkan kode escape tersebut.

Sekarang kembali ke bash. Seperti yang mungkin telah Anda perhatikan, ketika saya mengacu pada warna cyan, saya telah menggunakan \033[0;36m , bukan \[\033[0;36m\] . Tanda kurung siku tidak ada. Tujuan dari tanda kurung siku adalah ketika menggunakan kode escape (warna) di prompt, bash harus tahu karakter mana yang tidak dicetak (lebar nol, tidak benar-benar menunjukkan apa pun). Dengan demikian Anda menyertakan karakter non-cetak di \[ \] . Jika Anda menghapus karakter ini, semuanya mungkin tampak berfungsi dengan baik pada awalnya, tetapi Anda akan mulai mengalami segala macam keanehan ketika perintah Anda melebihi lebar terminal. Hal ini karena ketika mengetik, bash harus tahu kapan perintah harus membungkus ke baris berikutnya. Untuk melakukan ini, ini menghitung lebar prompt, dan kemudian lebar berapa banyak yang Anda ketik.

Catatan lain, tentang tput . CYAN="\[\033[0;36m\]" adalah tidak hal yang sama seperti CYAN="$(tput setaf 6)" . Seperti yang baru saja kita diskusikan, tanda kurung siku relevan dengan bash, dan tput hanya akan menampilkan kode escape terminal.

Terkait:Linux – Apakah Linux adalah Unix?

Karena tanda kurung siku biasanya hanya relevan di prompt, jika Anda menggunakan warna dalam output skrip atau sesuatu, Anda tidak boleh menggunakannya. Artinya, jika Anda akan menggunakan warna lebih dari sekadar petunjuk, Anda perlu mendefinisikan banyak variabel. Satu dengan tanda kurung siku untuk digunakan di prompt, dan satu lagi tanpa tanda kurung untuk yang lainnya. Meskipun Anda bisa menambahkan tanda kurung siku secara manual setiap kali Anda mereferensikan warna di prompt.

Singkat cerita, Anda mungkin ingin mendefinisikan sesuatu seperti:

local CYAN="$(tput setaf 6)" # OR CYAN="\033[0;36m"
local LIGHT_CYAN="$CYAN$(tput bold)" # OR LIGHT_CYAN="\033[1;36m"
local PROMPT_CYAN="\[$CYAN\]"
local PROMPT_LIGHT_CYAN="\[$LIGHT_CYAN\]"

Linux
  1. Panduan terminal Linux untuk pemula

  2. Kiat bash untuk sehari-hari di baris perintah

  3. Bagaimana Menghentikan Skrip Loop Bash Di Terminal?

  1. Di mana halaman manual untuk C++?

  2. File di mana struktur data untuk tabel Global Descriptor dan Local Descriptor ditentukan?

  3. Terminal yang mendukung kode pelarian miring ANSI?

  1. Cara mengubah warna terminal Linux Anda

  2. Tujuan Kata Kunci "lakukan" Di Bash For Loops?

  3. Ssh – Atur Warna Terminal Mesin Lokal Untuk Menggunakan Warna Mesin yang Saya Gunakan Ssh?