Начини на плащане Abuse

Цвета терминала Linux

26.09.2021, 22:47

Предимството на 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' трябва да се редактира. Форматът на реда е разшифрован в документацията на bash, в раздела "Promting". От него следва, че последователността esc трябва да започва с "[" и да завършва с "]". По този начин:

  • [[01;32m]] - задава зелен цвят;
  • u - извежда името на потребителя;
  • h - извежда името на хоста;
  • [[00m] - изчиства зададените атрибути;
  • [[01;34m] - задава син цвят;
  • w - извежда името на работната директория;
  • Hi - пример за това, че може да се извежда всеки производен текст.

Какво още може да се извежда в подкана:

  • 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]--->$ '

И командният ред ще изглежда така: