Używałem tak często kolorów w skryptach Bash (głównie w CentOS), ale aby ich użycie było bardziej przekonujące, ostatecznie zmieniam definicje zmiennych na wartości kolorów:
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\]"
lub również z tput
:
bold=`tput bold`
normal=`tput sgr0`
whitef=`tput setaf 7`
greenf=`tput setaf 2`
redb=`tput setab 1`
Przeszukałem /etc/rc.d/init.d
katalog, ale nie znalazłem tam nic związanego z definicjami kolorów.
Czy istnieje już taka definicja? Jeśli nie, umieściłbym je w pliku, /etc/rc.d/init.d
na przykład, i umieściłbym w moich skryptach, trochę jak z/etc/rc.d/init.d/functions
\e[1;30m
, na przykład, technicznie nie reprezentują szarości, ale raczej gniazdo kolorów zwykle wyświetlane przez terminal jako szare. Emulatory terminali mogą swobodnie zmieniać rzeczywiste kolory wyświetlacza i często sprawiają, że są one konfigurowalne przez użytkownika.Odpowiedzi:
W tym pytaniu jest kilka aspektów.
Po pierwsze, bash nie definiuje kolorów. W rzeczywistości bash absolutnie nie ma pojęcia, że kolory w ogóle istnieją. Wie tylko, że kazałeś mu wypisać postacie
\033[0;36m
. Twój emulator terminala (xterm, gnome-terminal, cokolwiek) odbiera te znaki i rozumie „Muszę zacząć wypisywać w cyjanie”.Zatem to twój emulator terminala rozumie kolory. Twój emulator terminala rozumie, że
\033[0;36m
jest niebieskozielony, ale inny emulator terminala może używać zupełnie innego zestawu znaków dla cyjan (choć żaden rozsądny emulator terminala nie obnosi się ze standardem i robi to). To jest powódtput
. Kiedy uruchomisztput setaf 6
,tput
poszuka kodów ucieczki twojego terminala dla koloru 6 (cyjan) i wyśle ten kod ucieczki.(zobacz to pytanie, aby uzyskać więcej informacji na temat
tput setaf
kodów)Teraz wracaj do bashu. Jak pewnie zauważyłeś, kiedy miałem na myśli kolor cyjan, używałem
\033[0;36m
, a nie\[\033[0;36m\]
. Brakuje nawiasów kwadratowych. Celem nawiasów kwadratowych jest to, że podczas używania kodów ucieczki (kolorów) w pytaniu, bash musi wiedzieć, które znaki nie drukują (szerokość zero, właściwie nic nie pokazują). W ten sposób zamykasz znaki niedrukowalne\[
\]
. Jeśli usuniesz te znaki, na początku wszystko może wyglądać dobrze, ale zaczniesz wpadać w różnego rodzaju dziwności, gdy twoje polecenie przekroczy szerokość terminala. Wynika to z tego, że podczas pisania bash musi wiedzieć, kiedy polecenie powinno zostać zawinięte do następnego wiersza. Aby to zrobić, oblicza szerokość monitu, a następnie szerokość wpisanego tekstu.Kolejna uwaga na temat
tput
.CYAN="\[\033[0;36m\]"
to nie to samo coCYAN="$(tput setaf 6)"
. Jak właśnie przedyskutowaliśmy, nawiasy kwadratowe odnoszą się do bash itput
będą wyświetlać tylko kody ucieczki terminala.Ponieważ nawiasy kwadratowe są zwykle istotne tylko w pytaniu, jeśli używasz kolorów na wyjściu skryptu lub czegoś, nie powinieneś ich używać. Oznacza to, że jeśli zamierzasz używać kolorów przez więcej niż monity, musisz zdefiniować wiele zmiennych. Jeden z nawiasami kwadratowymi do użycia w wierszu polecenia, a drugi bez użycia wszystkiego innego. Chociaż możesz po prostu ręcznie dodać nawiasy kwadratowe za każdym razem, gdy odwołujesz się do koloru w monicie.
Krótko mówiąc, prawdopodobnie chcesz zdefiniować coś takiego:
źródło
Ctrl
+Alt
+F1
?