Перевага Linux полягає в тому, що за бажання в ньому можна налаштувати все, що завгодно. У цьому і виражається перевага проективних систем над процедурними. Це своєрідний конструктор, що складається з окремих блоків, кожен з яких можна налаштувати за своїм бажанням.
Особливо цікаво, якщо не просто копіюєш готові рішення, а намагаєшся розібратися, що і як влаштовано. І навіть вирішуючи несерйозне завдання, дізнаєшся щось нове.
Наприклад, вам захотілося налаштувати кольори терміналу linux у виводі команди ls
.
З документації до ls
можна зрозуміти, що встановлення кольорів для виведення здійснюється за допомогою утиліти dircolors, яка або встановлює параметри кольору зі своєї власної бази, або бере їх із файлу ~/.dircolors
. Також згадувалося, що ініціалізація використання кольорів відбувається через ~/.bashrc
, файл із налаштуваннями командної оболонки, а самі параметри визначаються через змінну LC_COLORS
.
У .bashrc
виявився скрипт такого змісту:
Його суть зводиться до перевірки на наявність утиліти dircolors у системі, присвоювання значення змінній і, в разі вдалого виконання, використання параметра --color=auto
під час кожного виклику ls
.
Якщо запустити утиліту dircolors, вона виводить значення змінної LC_COLOR
.
Також можливе виведення значення змінної LC_COLORS
у структурованому вигляді, зазначенням ключа:
$ dircolors -p
Оскільки висновок виходить довгий, наводити його не буду.
Якщо переспрямувати виведення dircolors -p
> ~/.dircolors
, то буде створено структурований файл, з якого і будуть братися налаштування кольорів. Редагуючи цей файл і встановлюються налаштування кольору для виведення ls
.
У створеному файлі .dircolors
є підказка:
Встановлюючи послідовність через крапку з комою, отримуємо потрібний нам колір у консолі linux, згідно з переліченими. Кольори терміналу linux від 30 до 37 для кольору шрифту, а з 40 до 47 для фону. Наприклад:
DIR 01;34 передбачає, що імена директорій будуть виділятися жирним шрифтом і синім кольором.
Але таким способом виходить лише вісім кольорів, а сучасні емулятори терміналу здатні виводити як мінімум 256.
Існують і інші способи встановлення кольору. Наприклад, значення EXEC 38;5;208;1 - дає помаранчевий товстий шрифт у виконуваних файлів.
Щоб не перебирати кольори linux вручну, є вже готова таблиця кольорів
Підставляючи в значення кольору 38;5;x - де x колір із таблиці, отримуємо необхідний результат. Виходить щось на кшталт цього:
Як це працює? Річ у тім, що встановлення кольору виведення інформації в емуляторі термінала здійснюється за допомогою ANSI escape-кодів. Це певна послідовність символів, яка не виводиться на екран, проте впливає на виведення. Називається вона так, оскільки починається з [ - коду "Esc". Оскільки терміналів та емуляторів терміналів існує безліч, ці керуючі коди стандартизовані. Керування кольором через послідовність від 30 до 37 - це стандарт ECMA-48. Інформація про нього міститься в розділі console_codes
.
Розібравшись, як встановлювати кольори linux через esc-коди, не важко буде переробити і розфарбувати рядок запрошення. За його виведення відповідає змінна PS1, яка визначена у файлі ~/.bashrc
У Linux Mint скрипт її ініціалізації має такий вигляд:
Тобто спершу визначається, чи запустив скрипт root або звичайний користувач. Оскільки в переважній більшості випадків має місце саме другий варіант, то і редагувати потрібно рядок, наступний після першого 'else'. Формат рядка розшифровано в документації по баш, у розділі "Promting". З нього випливає, що esc-послідовність має починатися з "[" і закінчуватися "]". Таким чином:
u
- виводить ім'я користувача;h
- виводить ім'я хоста;w
- виводить ім'я робочої директорії;Що ще можна вивести в рядку запрошення:
d
- дату, у форматі "Wed Dec 28";A
- час у 24-годинному форматі;Введемо щось цікавіше:
PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '
І рядок запрошення набуде вигляду: