Настроенный по дефолту терминал — унылое зрелище, отпугивающее новичков и наводящее тоску на гуру. Многое из того, что способен дать командный интерпретатор пользователю, оказывается скрыто за семью замками, а то, что остается доступным — просто неудобно. Перед тем, как консоль станет действительно сподручным инструментом, придется изрядно попотеть.

Полезная инфа в приглашении

Приглашение командного интерпретатора bash формируется на основе содержимого переменной окружения PS1. Если верить man-страницам, эта переменная может содержать любые строки, а также довольно большой набор специальных управляющих символов, которые при выводе приглашения будут превращены в актуальные данные. Так, например, в дистрибутиве Ubuntu содержимое переменной PS1 выглядит так:

'${debian_chroot:+($debian_chroot)}u@h:w$ '

А при выводе на экран превращается во всем знакомую строку вида:

юзер@имя_хоста:текущий_каталог$

Нетрудно догадаться, что юзер здесь появляется за счет управляющего символа ‘u’, имя хоста — за счет ‘h’, а текущий каталог — это ‘w’. Неуклюжая запись, содержащая в себе слова debian_chroot, это всего лишь индикатор того, находится ли пользователь в chroot-окружении. Такое лаконичное приглашение, конечно, удобно, но содержит далеко не всю информацию, которую bash способен отобразить. В его арсенале есть как минимум два десятка различных управляющих последовательностей, о которых многие пользователи даже не подозревают. Вот список наиболее интересных из них:

  • d — текущая дата
  • j — количество фоновых заданий
  • A — текущее время
  • ! — номер команды в истории

Кроме того, в PS1 вполне можно использовать текущие переменные окружения, а если учитывать, что перед каждым выводом на экран PS1 перечитывается, то туда можно засунуть такие вкусности, как, например, статус последней выполненной команды (переменная $?), чтобы знать, было ли ее исполнение успешным.

Управляющий символ ‘n’ также допустим в PS1, поэтому приглашение к вводу можно сделать многострочным, а заодно визуально отделить его от остального текста (с помощью начальной пустой строки):

PS1='nwnu@h:$?$ '

Но и это еще не все. Пример с индикатором chrootокружения показывает, что в приглашении можно использовать вывод любых сторонних приложений, а это открывает просто безграничные возможности по его кастомизации. Например, следующим образом в приглашение можно добавить данные о текущей погоде, количестве непрочитанных писем в gmail и уровне сигнала Wi-Fi:

$ vi ~/.bashrc

Google-погода

Google-почта

Сигнал Wi-Fi

Все это нужно поместить в конец ~/.bashrc и выставить на файл права 600, чтобы никто не смог подсмотреть пароли. Результат будет примерно таким:

-7:32:70/70:/usr/local
j1m@1313:0$

 

 Печать даты в правом верхнем углу

Давайте соберем их все вместе и создадим командную строку, которая выводит дату в правом верхнем углу терминала:

Отображать дату в правом верхнем углу

В приведенном выше выражении происходит многое. Сначала мы сохраняем текущее положение курсора с помощью команды tput sc. Обратите внимание, что команда tput sc вложена в оператор подстановки команд $(…). Во-вторых, мы перемещаем курсор в правое верхнее положение нашего терминала.

Поэтому мы устанавливаем номер строки курсора равным 1 и создаем выражение для вычисления номера столбца. В этом выражении мы получаем номер последнего столбца нашего терминала из переменной окружения $COLUMNS и вычитаем 15, чтобы создать пространство, необходимое для печати даты.

После установки положения курсора в правом верхнем углу мы печатаем текущую дату с помощью \ d управляющего символа. Однако мы по-прежнему ничего не напечатали в тексте командной строки. Для этого мы сначала восстанавливаем положение курсора в исходное положение с помощью команды tput rc и печатаем знак доллара.

Раскрашиваем консоль

При работе в консоли пользователь часто получает большое количество никак не отформатированной информации. Порой выбрать в потоке данных действительно необходимое довольно сложно. Благодаря специальным непечатаемым escape-последовательностям мы можем изменить цвет и фон выводимых символов, чтобы облегчить восприятие данных.

Все escape-последовательности заключаются в [33[ и ], а после кода цвета должна еще стоять буква m. Все цвета расписаны в справочной странице. Например, черному соответствует 0;30, зеленому — 0;32, красному — 0;31, желтому — 1;33, белому — 1;37 и так далее. Чтобы в строке приглашения выводились имя системы (символ h) и логин пользователя (u), подсвеченные красным цветом, а текущий каталог — желтым (w), в конфиге ~/.bashrc заменяем значение переменной PS1 на следующее:

При необходимости через точку с запятой можно указать цвет фона. Для этой цели используются числа от 40 (черный) до 47 (белый).

Все это также можно использовать в скриптах, хотя, чтобы не путаться, в этом случае лучше задействовать переменные, которые потом и вызывать в нужном месте. Например:

Не забываем о том, что некоторые команды поддерживают цветной вывод. Проще это решить при помощи алиасов:

И так далее. За настройки цветов каталогов и файлов с разным расширением отвечает утилита dircolors, устанавливающая переменную LC_COLORS. Чтобы получить все значения, просто вводим:

Использовав полученный результат как шаблон и сохранив его в / etc/DIR_COLORS (либо в персональном конфиге ~/.dir_colors), можно создать свою раскраску.

Программистам будет очень полезен cout (code.google.com/p/cout) — небольшой скрипт на Python, подсвечивающий вывод make, gcc, svn и diff. Скрипт не требует установки, просто скачиваем и распаковываем архив, а затем создаем псевдоним:

Теперь проверяем работоспособность, используя заранее подготовленный Makefile:

 

 

 

 

 

Шелл (консоль) — это оболочка, в которой выполняются команды. Он показывает вам так называемое приглашение, оно обычно состоит из имени пользователя, имени компьютера и пути к тому месту, где вы сейчас находитесь. И выполняет команды, которые вы в него вводите.

Стандартное приглашение в шелле

Скучновато, правда? Первое, что мы сделаем — сменим оболочку с bash на zsh. Bash — это стандартная оболочка, которая поставляется в комплекте большинства систем. Zsh — это более современная оболочка со множеством плюшек. По сравнению с bash улучшены автодополнение, алиасы, хоткеи. Всё, что может bash, zsh может тоже, так что не вижу причин не переходить. У пользователей OS X zsh уже есть на компьютере, а пользователям Linux, скорее всего, нужно его установить. В Ubuntu и Debian это делается просто:

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *