Управління консоллю FreeBSD
Керуючий символ ESCAPE (ASCII - 0x1B HEX, 033 OCT, 27 DEC)
Управління консоллю, вікном терміналу та іншим господарством завжди починається з виведення символу, що управляє, т.зв. Escape символ. Його ASCII-код дорівнює 27, при редагуванні він зазвичай з'являється як ^[ . Однак це недрукований символ і в консолі його просто так не ввести.
Щоб уникнути проблеми введення, необхідно вдатися до допомоги тих команд, які вміють розширювати передані ним рядки, замінюючи код символу на сам символ. У консолі фрібсд є, як мінімум, дві такі команди - вбудованаecho-e у/bin/sh та утиліта/usr/bin/printf. Виглядає це так:
Після escape-символу вже йдуть безпосередньо команди на керування терміналом (консоль, ssh-клієнт тощо). Загалом це виглядає приблизно так:
Ось так інтерпретується рядок, виведенийprintf :
\033[1;31m модифікатор кольору (яскравий + червоний шрифт)Hello безпосередньо напис\033[m скидання модифікатора кольору (повернення до стандартних налаштувань)>\n переклад рядка
Модифікатори кольору
Модифікатор кольору задається за допомогою конструкції [#m , де # — номер кольору або послідовність номерів, розділених крапкою з комою.
| \033[m | скасування модифікаторів кольору |
| \033[0m | скасування модифікаторів кольору |
| \033[1m | яскравий |
| \033[4m | підкреслений у PUTTY, яскравий у FreeBSD |
| \033[5m | світлий у PUTTY, без ефекту у FreeBSD |
| \033[7m | інверсія |
| \033[12m | після цього консоль PUTTY перетвориться начереда кракозябр. |
| \033[21m | підкреслений у PUTTY, без ефекту у FreeBSD |
| \033[30m | чорний шрифт |
| \033[31m | червоний шрифт |
| \033[32m | зелений шрифт |
| \033[33m | жовтий шрифт у PUTTY, коричневий у FreeBSD (якщо не яскравий) |
| \033[34m | синій шрифт |
| \033[35m | малиновий шрифт |
| \033[36m | синій шрифт |
| \033[37m | сірий шрифт |
| \033[40m | чорний фон |
| \033[41m | червоний фон |
| \033[42m | зелений фон |
| \033[43m | жовтий фон у PUTTY, коричневий у FreeBSD |
| \033[44m | синій фон |
| \033[45m | малиновий фон |
| \033[46m | блакитний фон |
| \033[47m | сірий фон |
Для більшої наочності я сформував таблицю кольорів у файлі color-freebsd.txt. Наведу скріншоти для PUTTY та FreeBSD.
Зведена таблиця кольорів для PUTTY

Зведена таблиця кольорів для FreeBSD

У комірках таблиці вказані параметри модифікатора, які потрібно використовувати, щоб досягти того ж кольору, як у комірки.
Не варто забувати, що модифікатори кольору можна групувати, використовуючи крапку з комою як роздільник. Також після закінчення кольорового виведення дуже бажано скинути модифікатори, щоб повернути консоль у вихідний стан.
Управління курсором
| \033[#A | пересунути курсор вгору на # позицій |
| \033[#B | пересунути курсор вниз на # позицій |
| \033[#C | пересунути курсор праворуч на # позицій |
| \033[#D | пересунути курсор вліво на # позицій |
| \033[#E | пересунути курсор вниз на # позицій і поставити на початок рядка |
| \033[#F | пересунути курсор вгору на # позицій та поставити на початок рядка |
| \033[#G | пересунути курсор в позицію поточного рядка (працює тільки в PUTTY) |
| \033[#;#H | помістити курсор за вказаними координатами |
Приклад реалізації прогрессбару засобами консолі та /bin/sh
Підсумовуючи цю статтю, я наведу приклад реалізації графічної лінії прогресу засобами /bin/sh .
У роботі це виглядає приблизно так:
Чесно скажу, що не став морочитися з точними формулами розрахунку координат смуги прогресу і всі цифри підібрав «на вічко». Але принцип тут використовується подвійно простий - виходячи з відсотка, в змінну $bar записується графічна частина прогресу (червона смуга), яка потім вирівнюється праворуч на довжину всієї смуги. При цьому щоразу при виведенні йде зміщення вліво на довжину всього прогресу, щоб забезпечити статичний вигляд.
Висновок
Якщо є запитання чи побажання, то можете писати сюди чи на форум. І вдалого колоризингу консолі :)
PS: Якщо раптом захочете розмістити будь-які матеріали з цієї статті у себе на сайті, будь ласка, не забудьте дати посилання на цей сайт як першоджерело.