Як зробити запрошення командного рядка bash різнобарвним і не тільки - планета calculate

Знайшов в інтернеті кілька статей, вирішив зібрати в одній.

У більшості дистрибутивів запрошення командного рядка Bash за замовчуванням того ж кольору, що і вводяться команди і текст висновку цих команд. При інтенсивній роботі в консолі, коли вводиться безліч команд поспіль, буває важко відразу побачити, де закінчується висновок однієї команди і починається введення інший, особливо якщо висновок команд великий. На щастя, Bash дозволяє виділити запрошення кольором.

Спочатку трохи теорії.

\ U - спеціальний символ, що означає логін користувача (тут - denister)
\ H - спеціальний символ, що означає ім'я комп'ютера (хоста) (calculate)
\ W - спеціальний символ, що означає робочу директорію. (Як відомо, тильда (

) Позначає домашню директорію).
Символи @, $ означають самі себе.

А тепер подивимося значення PS1 по-замовчуванню в CLD 11.0 (у мене)
(Я розглядаю варіант звичайного користувача, який не рута.)

Як бачимо, тут вже присутній колір.

Так яким же чином відбувається завдання кольору символів і фону, а також перемикання різних режимів відображення терміналу в UNIX (і в безлічі інших ОС)? Так само, як і в легендарні часи телетайпних терміналів - посилкою на пристрій відображення керуючих команд у вигляді esc-послідовностей (esc скор. Від англ. Escape, вимовляється як ескейп).
Така послідовність складається з двох або більше символів, перший з яких буде esc (десятковий код дорівнює 27, восьмеричний - 033, шістнадцятковий - 0x1B). Розфарбовування проводиться внесенням певних змін до структури змінної PS1.
Щоб розфарбувати якусь частину запрошення, потрібно безпосередньо перед цією частиною підставити вираз \ [\ 033 [Хm \]. У разі жовтого кольору замість Х підставляємо 33; 1. Якщо підставити просто 33, то вийде цегельний колір; якщо 33; 4 то цегляний підкреслений; якщо 33; 5 то цегляний символ стане блимати; якщо 33,7 то буде чорний символ в цегляному квадратику.
До слова сказати, байдуже в якому порядку ставити значення навколо крапки з комою, так 33; 1 еквівалентно 1; 33.

Ось таблиця основних кольорів

Додавання до номера кольору через крапку з комою одиниці дає більш світлий відтінок:

Додавання до номера кольору через крапку з комою четвірки дає підкреслення.
Додавання до номера кольору через крапку з комою п'ятірки дає миготливий символ.
Додавання до номера кольору через крапку з комою сімки дає чорний символ на тлі відповідного кольору.
Якщо замість номерів 30-38 підставити номера 40-48, то фарбуватися в ті ж самі кольори будуть не символи, а фон навколо них:

Можна також складати більш складні комбінації кольорів фону і шрифту, наприклад
\ [\ 033 [01; 32; 42m \].

Змінити PS1 можна прямо з командного рядка, набравши наприклад

але тоді при виході з консолі всі кольори пропадуть.
Для того, щоб зробити різнобарвне запрошення постійним, потрібно створити в домашньому каталозі файл .bashrc і вписати в нього значення PS1 також як вводили в терміналі:

Хочу зауважити, що якщо ви зміните користувача, наприклад на рута, то всі кольори знову зміняться по-замовчуванню. Щоб розфарбувати запрошення BASH іншого користувача, потрібно створити такий же файлик .bashrc в домашній директорії цього користувача, наприклад /root/.bashrc і вписати в нього значення PS1.
Можна поміняти PS1 глобально в / etc / bash / bashrc, але я цього робити не раджу.

Ну а тепер найцікавіше!

# Використання різних кольорів:

\ T - виводить час
\ D - дату

# Показуємо повний шлях:

У цьому простому і зрозумілому прикладі видаються два рядки з даними. У першому рядку в зручному форматі зображується повний шлях, а в другій - тільки ім'я користувача.
\ N - перенесення рядка

# Зміна кольору в разі неправильного введення команди

Це звичайна командний рядок. Колір видається повідомлення зміниться в разі, якщо виникнуть проблеми з виконанням останньої команди. Одночасно видається шлях до поточного директорію і для зручності пошуку для кожної команди вказується її номер в списку історії команд bash.

# Видаємо веселу пику в разі, якщо виконання команди завершилося успішно

Ідея полягає в тому, що якщо ваша команда буде виконана успішно, то буде видаватися весела пика. А якщо команда завершиться невдало - буде видана сумна пика.

Ну і якщо хто ще знайде цікаві рішення - викладайте.

І звичайно - man bash розділ PROMPTING

Схожі статті