Terminal renk kaçış dizileri bash için herhangi bir yerde tanımlanmış mı?


22

Bash komut dosyasında (çoğunlukla CentOS'ta) her sık ​​kullanılan renkleri kullandım, ancak kullanımlarını daha rahat hale getirmek için değişkenleri renk değerlerine yeniden tanımlıyorum :

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\]"

veya ayrıca tput:

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

Dizini gezdim /etc/rc.d/init.dama renk tanımlarıyla ilgili bir şey bulamadım.

Bu tanım zaten var mı? Olmazsa, onları bir dosyaya /etc/rc.d/init.dkoyardım ve senaryolarıma eklerdim, biraz/etc/rc.d/init.d/functions


Çünkü, olmadığında \e[1;30m, örneğin, teknik olarak gri temsil etmez, bunun yerine renkli yuva genellikle bir terminal tarafından gri renkle gösterilir. Terminal emülatörleri, gerçek ekran renklerini değiştirmekte özgürdür ve çoğu zaman bunları kullanıcı tarafından yapılandırılabilir bir seçenek haline getirir.
chepner

Yanıtlar:


36

İstediğin şeyde oyunda birkaç yön var.

İlk olarak, bash renkleri tanımlamaz. Aslında, bash'ın renklerin bile var olduğu hakkında hiçbir fikri yok. Tek bildiği, karakterleri çıkarmasını söylediğini \033[0;36m. Terminal emülatörünüz (xterm, gnome-terminal, ne olursa olsun) bu karakterleri alır ve "camgöbeği ile çıkmaya başlamam gerekir" i anlar.

Böylece renkleri anlayan terminal emülatörünüzdür. Terminal emülatörünüz bunun \033[0;36mcamgöbeği olduğunu anlıyor , ancak başka bir terminal emülatörü, camgöbeği için tamamen farklı bir karakter dizisi kullanabiliyor (her ne kadar akıllıca bir terminal emülatörü standardı gösterip bunu yapmasa da). Bunun nedeni budur tput. Koşarken tput setaf 6, tputterminalinizin 6 (mavi) renk için kaçış kodlarını arayacak ve bu kaçış kodunu yazdıracaksınız.
( kodlar hakkında daha fazla bilgi için bu soruya bakın tput setaf)

Şimdi bash'a dön. Fark edeceğiniz gibi ben mavi renge atıfta olmuşken, ben kullanıyorum \033[0;36m, değil \[\033[0;36m\]. Köşeli parantezler eksik. Köşeli parantezlerin amacı komut satırındaki çıkış kodlarını (renkleri) kullanırken bash'ın hangi karakterlerin yazdırılmadığını bilmesi gerekir (sıfır genişlik, aslında hiçbir şey göstermez). Böylece yazdırılmayan karakterleri içine alırsınız \[ \]. Bu karakterleri kaldırırsanız, her şey başlangıçta her şey yolunda gibi görünebilir, ancak komutunuz terminal genişliğini aştığında her türlü tuhaflıkla karşılaşmaya başlayacaksınız. Bunun nedeni, yazarken, bash komutunun bir sonraki satıra ne zaman sarılması gerektiğini bilmesidir. Bunu yapmak için, istemin genişliğini ve ardından ne kadar yazdığınızı genişliğini hesaplar.

Hakkında başka bir not tput. CYAN="\[\033[0;36m\]"olduğu değil aynı şeydir CYAN="$(tput setaf 6)". Az önce tartıştığımız gibi, köşeli parantezler bash ile ilgilidir ve tputsadece terminal çıkış kodlarını çıkarırlar.

Köşeli parantezler genellikle yalnızca komut satırında geçerli olduğundan, bir komut dosyasının çıktısında renkler kullanıyorsanız, bunları kullanmamalısınız. Yani, istemlerden daha fazla renk kullanacaksanız, birden çok değişken tanımlamanız gerekir. Biri komut isteminde kullanmak için köşeli ayraçlı, diğeri ise her şey için. Her ne zaman bir renk referansına her referansta köşeli parantezleri sadece elle ekleyebilirsiniz.

Uzun lafın kısası, muhtemelen şöyle bir şey tanımlamak istersiniz:

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\]"

Ctrl+ Alt+ İle gerçek bir terminale giriş yaparken renkleri nasıl görebilirim F1?
Serge Stroobandt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.