Są to sekwencje specjalne ANSI ; ten link prowadzi do tabeli kodów kolorów, ale na tej stronie Wikipedii są też inne ciekawe rzeczy. Nie wszystkie z nich działają na (np.) Normalnej konsoli Linux.
To jest niepoprawne:
\033]00m\] # white
0
resetuje terminal do domyślnych (prawdopodobnie białych). Rzeczywisty kod białego pierwszego planu to 37. Ponadto nawias klamrowy zamykający na końcu ( \]
) nie jest częścią sekwencji kolorów (zobacz kilka ostatnich akapitów poniżej, aby wyjaśnić ich cel w ustawianiu monitu).
Należy pamiętać, że niektóre terminale GUI pozwalają określić niestandardowy schemat kolorów. Wpłynie to na wynik.
Jest tutaj lista, która dodaje 7 kolorów pierwszego planu i 7 kolorów tła, których wcześniej nie widziałam, ale wydają się działać:
# Foreground colors
90 Dark gray
91 Light red
92 Light green
93 Light yellow
94 Light blue
95 Light magenta
96 Light cyan
# Background colors
100 Dark gray
101 Light red
102 Light green
103 Light yellow
104 Light blue
105 Light magenta
106 Light cyan
Ponadto, jeśli masz 256-kolorowy terminal GUI (myślę, że większość z nich jest teraz), możesz zastosować kolory z tej tabeli:
Sekwencja ANSI, aby je wybrać, używając liczby w lewym dolnym rogu, rozpoczyna się 38;5;
na pierwszym planie i 48;5;
na tle, a następnie numer koloru, a więc np .:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Daje mi jasnopomarańczowy kolor na jasnobrązowy (co oznacza, że paleta kolorów jest z grubsza przybliżona).
Możesz zobaczyć kolory na tym wykresie 1, ponieważ dość łatwo pojawiałyby się na twoim terminalu:
#!/bin/bash
color=16;
while [ $color -lt 245 ]; do
echo -e "$color: \\033[38;5;${color}mhello\\033[48;5;${color}mworld\\033[0m"
((color++));
done
Wynik jest oczywisty.
Niektóre systemy ustawiają zmienną $ TERM na, xterm-256color
jeśli używasz 256-kolorowego terminala za pomocą jakiegoś kodu powłoki /etc/profile
. W innych przypadkach powinieneś mieć możliwość skonfigurowania terminala, aby z niego korzystał. To pozwoli aplikacjom TUI wiedzieć, że jest 256 kolorów i pozwoli ci dodać coś takiego ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Pamiętaj, że kiedy używasz sekwencji ucieczki kolorów w swoim znaku zachęty, powinieneś umieścić je w \
nawiasach kwadratowych (z prefiksem), jak poniżej:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Zauważ, że [
wnętrze sekwencji kolorów nie jest usuwane, ale otaczające są. Celem tego drugiego jest wskazanie powłoce, że zamknięta sekwencja nie liczy się do długości znaku zachęty. Jeśli ta liczba jest niepoprawna, podczas przewijania historii mogą się zdarzyć dziwne rzeczy, np. Jeśli jest ona zbyt długa, nadmiar długości ostatniego przewijanego ciągu pojawi się na monitach i nie będzie można cofnąć się do to (jest ignorowane w taki sam sposób, jak podpowiedź).
Zauważ też, że jeśli chcesz dołączać dane wyjściowe polecenia uruchamianego za każdym razem, gdy monit jest używany (w przeciwieństwie do tylko jednego razu po ustawieniu pytania), powinieneś ustawić go jako literał ciąg z pojedynczymi cudzysłowami, np .:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Chociaż nie jest to świetny przykład, jeśli jesteś zadowolony z używania specjalnych \d
lub \D{format}
szybkich ucieczek bash - które nie są tematem pytania, ale można je znaleźć man bash
pod poniżej PROMPTING
. Istnieje wiele innych przydatnych ucieczek, takich jak \w
bieżący katalog, \u
bieżący użytkownik itp.
1. Główną częścią tego wykresu, kolory 16 - 231 (zauważ, że nie są one uporządkowane numerycznie) to sześcian kolorów 6 x 6 x 6 RGB. „Kolorowa kostka” odnosi się do faktu, że przestrzeń kolorów RGB można przedstawić za pomocą trójwymiarowej tablicy (z jedną osią dla czerwieni, jedną dla zieleni i jedną dla niebieskiego). Każdy kolor w sześcianie tutaj może być reprezentowany jako współrzędne w tablicy 6 x 6 x 6, a indeks na wykresie obliczany w ten sposób:
16 + R * 36 + G * 6 + B
Pierwszy kolor w sześcianie, o indeksie 16 na wykresie, jest czarny (RGB 0, 0, 0). Możesz użyć tej formuły w skrypcie powłoki:
#!/bin/sh
function RGBcolor {
echo "16 + $1 * 36 + $2 * 6 + $3" | bc
}
fg=$(RGBcolor 1 0 2) # Violet
bg=$(RGBcolor 5 3 0) # Bright orange.
echo -e "\\033[1;38;5;$fg;48;5;${bg}mviolet on tangerine\\033[0m"
\]
tutaj nie jest właściwie częścią sekwencji kolorów; służy to konkretnemu ustawianiu monitów (dodałem kilka akapitów na końcu mojej odpowiedzi na ten temat). „Byłoby miło, gdyby istniała również bardziej czytelna forma”. -> Wytnij i wklej we własnej odpowiedzi jest jednym ze sposobów, aby to zrobić.