Кольори в bash.

bash logo
Зібрався трохи оптимізувати і розфарбувати запрошення командного рядку в терміналі нововстановленого Linux Mint 20 і зрозумів що рядок

export PS1='${debian_chroot:+($debian_chroot)}\[\033[00;32m\]\D{ %m/%d/%Y }\A \[\033[01;31m\]\u\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '

за роки перетворився в набір малозрозумілої абракадабри. А тому вимагає певного відновлення знань, та і взагалі приведення до більш зручноподаного виду. Отже кольори та параметри в bash у застосуванні до наступної задачі - замінити стандартне запрошення виду

user@host:folder$

на власне, додавши час перед іменем користувача та використавши для тексту 3 секцій(час, користувач/ім’я комп’ютера, директорія) 3 різних кольори і подати це у вигляді який з часом не перетвориться на абракадабру.

Базові змінні:

  • \D{ %m/%d/%Y } - дата у форматі місяць/день/рік
  • \A - час у 24-годинному форматі години:хвилини
  • \u - ім’я користувача
  • \h - ім’я ПК
  • \W - поточна директорія

Є 2 підходи - стандартний і використовуючи команду tput

Стандартний підхід

  • \e[ - символ початку кольору/стилю; тут \e, або \033, символ екранування [ вмикає атрибут
  • \e[m - символ кінця кольору/стилю; тут m символ завершення управляючої послідовності
  • x;ym - код кольору/стилю
    • y = 30 - чорний
    • y = 31 - червоний
    • y = 32 - зелений
    • y = 33 - жовтий
    • y = 34 - синій
    • y = 35 - фіолетовий
    • y = 36 - не можу характеризувати :)
    • y = 37 - білий
    • x може мати значення 0-9, звичайний шрифт, товстий, підкреслений і т.п.

Для зручності зразу переводимо це у формат зрозумілих змінних:

  • BLACK=”\e[1;30m”
  • RED=”\e[1;31m”
  • GREEN=”\e[1;32m”
  • YELLOW=”\e[1;33m”
  • BLUE=”\e[1;34m”
  • PURPLE=”\e[1;35m”
  • CYAN=”\e[1;36m”
  • WHYTE=”\e[1;37m”
  • END=”\e[m”

В результаті в .bashrc додаємо секцію:

	RED="\e[1;31m";
	GREEN="\e[1;32m";
	YELLOW="\e[1;33m";
	BLUE="\e[1;34m";
	PURPLE="\e[1;35m";
	CYAN="\e[1;36m";
	WHYTE="\e[1;37m";
	END="\e\[m"
	export PS1="$BLUE[\D{ %m/%d/%Y } \A]$END $RED\u@\h$END $YELLOW\W$END $WHYTE>>$END"

TPUT підхід

  • tput bold - товстий шрифт
  • tput setab Х - колір фону
  • tput setaf Х - колір шрифту
  • tput sgr0 - кінець стилю

Коди кольорів:

  • 0 - чорний
  • 1 - червоний
  • 2 - зелений
  • 3 - жовтий
  • 4 - синій
  • 5 - фіолетовий
  • 6 - неясний :)
  • 7 - білий

В результаті в .bashrc додаємо наприклад таку секцію:

export PS1="\[$(tput bold)$(tput setab 7)$(tput setaf 5)\][\D{ %m/%d/%Y } \A] \[$(tput setaf 1)\]\u@\h:\[$(tput setaf 4)\]\w $ \[$(tput sgr0)\] "

Звертаємо увагу на необхідність екранування символів [].