Це послідовності втечі ANSI ; це посилання стосується діаграми кольорових кодів, але є й інші цікаві речі на цій сторінці Вікіпедії. Не всі вони працюють на (наприклад) звичайній консолі Linux.
Це неправильно:
\033]00m\] # white
0
скидає термінал за замовчуванням (який, мабуть, білий). Дійсний код переднього плану для білого кольору - 37. Також діаграма, що уникнула, закривається в кінці ( \]
), не є частиною кольорової послідовності (див. Останні кілька абзаців нижче для пояснення їх призначення при встановленні підказки).
Зауважте, що деякі термінали графічного інтерфейсу дозволяють задати індивідуальну колірну схему. Це вплине на вихід.
Тут є список, який додає 7 кольорів переднього плану та 7 фонових кольорів, яких я не бачив раніше, але вони, здається, працюють:
# 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
Крім того, якщо у вас є 256 кольоровий GUI-термінал (я думаю, що зараз їх більшість), ви можете застосувати кольори з цієї діаграми:
Послідовність ANSI для їх вибору, використовуючи число в нижньому лівому куті, починається 38;5;
для переднього плану та 48;5;
для фону, а потім номера кольору, наприклад:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Дає мені світло-помаранчевий колір засмаги (мається на увазі, кольорова діаграма приблизно приблизна).
Ви можете побачити кольори на цій діаграмі 1, як вони з'являться на вашому терміналі досить легко:
#!/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
Вихід не пояснює себе.
Деякі системи встановлюють змінну $ TERM, xterm-256color
якщо ви знаходитесь на кольоровому терміналі 256 через якийсь код оболонки /etc/profile
. На інших, ви повинні мати можливість налаштувати свій термінал для його використання. Це дозволить додаткам TUI знати, що є 256 кольорів, і дозволить додати щось подібне до своїх ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Будьте уважні, коли ви використовуєте кольорові послідовності відстеження кольорів у своєму запиті, вам слід вкладати їх у \
квадратні дужки, що увійшли ( попередньо):
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Зауважте [
, що інтер'єр у кольоровій послідовності не уникнути, але огороджувальні. Мета останнього полягає в тому, щоб вказати оболонці, що додана послідовність не зараховується до символьної довжини підказки. Якщо цей підрахунок невірний, дивні речі трапляться, коли ви прокручуєте історію, наприклад, якщо вона занадто довга, перевищення довжини останнього прокрученого рядка з’явиться прикріпленим до вашої підказки, і ви не зможете повернути назад в область це (ігнорується так само, як і підказка).
Також зауважте, що якщо ви хочете включати результат виконання команди при кожному використанні запиту (на відміну від лише одного разу, коли запрошення встановлено), ви повинні встановити його як буквальний рядок з одинарними лапками, наприклад:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Незважаючи на те, що це не великий приклад , якщо ви щасливі з допомогою BASH в спеціальних \d
або \D{format}
-команда - які не є темою питання , але може бути знайдено в man bash
Under PROMPTING
. Існують різні інші корисні виходи, такі як \w
для поточного каталогу, \u
для поточного користувача тощо.
1. Основна частина цієї діаграми - кольори 16 - 231 (зауважте, що вони не в числовому порядку) - це кольоровий куб розміром 6 x 6 x 6 RGB. "Колір куба" позначає той факт, що кольоровий простір RGB можна представити за допомогою тривимірного масиву (з однією віссю для червоного, однією для зеленого та однією для синього). Кожен колір у кубі може бути представлений у вигляді координат у масиві 6 x 6 x 6, а індекс у діаграмі обчислюється таким чином:
16 + R * 36 + G * 6 + B
Перший колір у кубі, в індексі 16 на графіку, - чорний (RGB 0, 0, 0). Ви можете використовувати цю формулу в сценарії оболонки:
#!/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"
\]
тут насправді не є частиною кольорової послідовності; це служить цілі конкретного встановлення підказок (я додав кілька абзаців до кінця своєї відповіді про це). "Було б добре, якби була і більш читабельна форма". -> вирізати n 'вставити у власній відповіді - це один із способів зробити це.