İ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;36m
camgö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
, tput
terminalinizin 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 tput
sadece 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\]"
\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.