Linux изменить приглашение командной строки
Приглашение в командной среде bash изменяется при помощи изменения переменных PS1, PS2, PS3, PS4 и PROMPT_COMMAND.
- PS1 — переменная, которая задает вид строки приглашения командной строки, которое bash выводит, когда ожидает ввода очередной команды пользователем.
- PS2 — переменная, отвечающая за вторичный тип приглашения ввода.
- PS3 — третичное приглашение, выводится тогда, когда пользователь должен сделать выбор в операторе select.
- PS4 — приглашение четвертого уровня, выводится при отладки сценариев (скриптов) в начале каждой строки перед командой перед исполняющейся командой.
- PROMPT_COMMAND — содержимое этой переменной выполняется перед каждой строкой приглашения.
Для того чтобы узнать текущие значения этих переменных можно воспользоваться командой echo.
Вывод будет примерно следующим:
Для изменения переменной можно пользоваться командой export . Например:
Изменит приглашение на такое:
Другим методом изменения данных переменных является задание из в конце файла
/.bashrc . Это делается таким образом:
Задание параметров приглашения командной оболочки производится при помощи задания управляющих последовательностей:
- \d — Дата в формате «День, месяц, число», например, Срд, Окт, 17.
- \h — Имя хоста (hostname) до первой точки
- \H — Полное имя хоста
- \t — Текущее время в 24-часовом формате: HH:MM:SS (часы:минуты:секунды)
- \T — Текущее время в 12-часовом формате: HH:MM:SS
- \@ — Текущее время в 12-часовом формате am/pm
- \u — Имя пользователя, запустившего оболочку
- \w — Полное имя текущего рабочего каталога (начиная с корня)
- \W — Текущий рабочий каталог (без указания пути)
- \$ — Символ #, если оболочка запущена суперпользователем, и символ $, если оболочка запущена обычным пользователем.
- \n — Новая строка (перевод строки)
- \s — Имя оболочки
- \# — Текущий номер команды
- \! — Порядковый номер данной команды в истории команд
- \\ — Обратный слэш (a backslash)
- \nnn — Непечатный символ, имеющий восьмеричный код nnn (к примеру esc)
- \a — Звуковой сигнал (ASCII-код 007)
- \e — escape (ASCII-код 033)
- \[ — Начало последовательности не печатаемых символов (этот символ может быть использован для того, чтобы включить в текст подсказки последовательность управляющих символов терминала)
- \] — Конец последовательности не печатаемых символов
Изменение цвета строки приглашения:
Изменение цвета строки приглашения командной оболочки делается при помощи последовательности
- # — номер свойства цвета
- ## — номер цвета
Номера свойств текста:
Свойство | Код |
Значение по умолчанию | 0 |
Повышенная яркость | 1 |
Пониженная яркость | 2 |
Подчеркнутый | 4 |
Нормальная яркость | 5 |
Инвертированный | 7 |
Скрытый | 8 |
Цвет | Текст | Фон |
Черный | 30 | 40 |
Красный | 31 | 41 |
Зеленый | 32 | 42 |
Желтый | 33 | 43 |
Синий | 34 | 44 |
Фиолетовый | 35 | 45 |
Голубой | 36 | 46 |
Белый | 37 | 47 |
Например такая последовательность:
Настроит строку приглашения следующим образом:
Как видно из примера управляющая последовательность изменяет свойства всего текста после неё и до другой последовательности.
Таким же образом устанавливается цвет фона и текста, но параметры дублированы. Первые два для фона, вторые — для текста:
Переменная PS2 :
Содержимое переменной PS2 появляется на экране терминала при переносе ввода команды на следующую строку. Например:
Метод изменения переменных одинаков, не будем останавливаться на каждой отдельно.
Переменная PS3 : Этот вид приглашения используется в скриптах, когда нужно сделать выбор при использовании оператора select.
Переменная PROMPT_COMMAND : Эта переменная используется для помещения какого либо выражения перед каждой строкой приглашения терминала:
Например если поместить в неё команду ls :
То перед каждой строкой приглашения выведется список файлов текущей папки:
Настройка приглашения командной строки в Bash
Приглашение ко вводу команд в bash — это строка, которая отображается слева от каждой команды, которую вы вводите в терминале. Обычно приглашение имеет вид пользователь@hostname:директория$
Приглашение можно настраивать. Можно добавлять информацию или, например, изменить цвет приглашения.
В какой переменной задается приглашение
Формат строки приглашения задается в переменной окружения PS1. Чтобы настроить приглашение, необходимо изменить значение переменной PS1.
Например, переменная PS1 может иметь значение:
Или, например, командой echo $PS1 можно вывести текущее значение переменной PS1. У меня в Ubuntu оно выглядит так:
Не пугайтесь. На самом деле существует масса возможностей для настройки строки приглашения. Ниже мы рассмотрим базовые методы настройки.
Как изменить приглашение (только для данной сессии)
Можно установить переменную PS1 только для текущей сессии в терминале. Это удобно, пока вы подбираете, как будет выглядеть строка приглашения. Чтобы это сделать нужно выполнить команду export для переменной PS1, например:
После выполнения команды строка приглашения в терминале сразу изменится.
Настройка приглашения
Для задания различных значений переменной PS1 существуют специальные символы. Комбинируя различные специальные символы можно составить свою строку приглашения.
Специальные символы начинаются с символа косой черты « \ », за которой следует буква или символ. Ниже приведена таблица специальных символов.
Name already in use
arch-wiki-md-repo / wiki / _content / russian / Bash-Prompt customization (russian).md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Состояние перевода: На этой странице представлен перевод статьи Color Bash Prompt. Дата последней синхронизации: 2015-07-21. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Существуют различные возможности настройки строки приглашения Bash’а (PS1), которые могут сделать работу в командной строке комфортней и продуктивней. Например, можно добавить дополнительную информацию или цвет, чтобы приглашение ввода можно было легко обнаружить среди остального текста.
В этой статье рассказывается как настроить персональное приглашение для обычного пользователя.
Чтобы применить изменения, сделанные в файле .bashrc , без перезапуска shell, запустите команду:
Следующие настройки полезны для визуального различия приглашения root пользователя от приглашений обычных пользователей.
Зелёное приглашение для обычных пользователей:
Красное приглашение для root (скопируйте из /etc/skel/ , если ещё не сделали этого):
Зелёное с синим приглашение для обычных пользователей:
/docs $ echo «sample output text» sample output text chiri
Этот пример предоставляет очень приятное цветное приглашение и тему консоли с ярко-белым цветом текста.
Вышеописанная строка содержит управляющие последовательности для цветового набора (начало окраски: \[\e[*color*\] , конец окраски: \[\e[m\] ) и информационные заполнители:
- \u — Имя пользователя. Исходное приглашение также содержит \h, который печатает имя хоста.
- \w — Текущий абсолютный путь. Используйте \W для текущего относительного пути.
- $ — Символ приглашения (например, # для root, $ для обычных пользователей).
- [ и ] — Эти теги должны обрамлять цветовые коды, чтобы bash понимал как правильно позиционировать курсор.
Последняя цветовая управляющая последовательность \[\e[1;37m\] не закрыта, поэтому весь оставшийся текст (всё что вы набираете в терминале, вывод программ и т.д.) будет окрашено в этот (ярко белый) цвет. Вы можете захотеть изменить этот цвет или удалить последнюю управляющую последовательность для того, чтобы оставить последующий вывод в неизменном цвете.
Этот пример отобразит строку приглашения с задним фоном. Строка очень хорошо отделяется посреди остального текста.
Красное с синим приглашение для root:
/docs # echo «sample output text» sample output text root
Этот пример предоставляет красное выделение и зелёный цвет текста в консоли.
В этом примере строка приглашения приобретает задний фон и очень хорошо выделяется среди остального текста, решётка с красным задним фоном.
Статус нагрузки/памяти для 256colors
Это даже не предел. Вместо использования sed для парсинга загрузки памяти и нагрузки (используя опцию -u для non-buffering) и встроенной команды history для сохранения вашей истории в HISTFILE после каждой команды, что может быть очень полезно, если у вас проблемы с вылетами оболочек или дочерних оболочек, этот пример по сути заставляет BASH печатать переменные, которые ему уже известны, таким обоазом делая его экстремально быстрым по сравнению с приглашениями, использующими не-встроенные команды.
Это приглашение из статьи BASH Power Prompt с AskApache.com, в которой разбираются подробности. Это особенно полезно для тех, кто хочет понять 256 цветные терминалы, ncurses, termcap и terminfo.
Этот пример для 256 цветных терминалов, из которых произошли \033[38;5;22m управляющие последовательности.
Список цветов для приглашений и Bash
Добавьте это в ваш(и) Bash файл(ы), чтобы задать цвета для приглашений и команд:
Или если вы предпочитаете названия цветов, вы сможете писать их без необходимости их вычисления и желания высоко интенсивных цветов:
Для использования в командах в окружении вашего shell:
$ echo -e «$
Двойные кавычки позволяют разрешить переменную $color , а управляющие \[ \] вокруг них позволяют не учитывать их при расчёте количества символов, поэтому позиция курсора будет верной.
Примечание: Если у вас возникает преждевременный перенос строки при наборе команды, скорее всего причиной является пропущенные управляющие последовательности ( \[ \] ).
Некоторые прерывания приглашения Bash перечислены в man странице:
Эта последовательность устанавливает позицию курсора:
Текущая позиция может быть сохранена так:
Чтобы восстановить позицию, используйте:
Следующий пример использует эти последовательности, чтобы отображать время в правом верхнем углу:
Переменная окружения COLUMNS содержит число столбцов в терминале. В примере выше из этого значения отнимается 5, чтобы выровнять 5-символьный вывод команды date по правому краю.
Отображение кода возврата
Используйте следующий промпт, чтобы видеть какое значение вернула последняя команда:
0 😉 : true 0 😉 : false 1 ;( :
Ноль — зелёный смайлик, а не ноль — красный. Таким образом, ваше приглашение будет со смайликом, если последняя операция была успешной.
Но вы возможно также захотите использовать имя пользователя и хоста, например так:
$ true 0 😉 andy@alba
$ false 1 ;( andy@alba
Или, если вы хотите создать ваш промпт с использованием юникод-символа ✓ для статуса ноль и юникод-символ ✗ для статуса не ноль:
$ true 0 ✓ andy@alba
$ false 1 ✗ andy@alba
$ I\ will\ try\ to\ type\ a\ wrong\ command. bash: I will try to type a wrong command. command not found 127 ✗ andy@alba
Альтернативно, это можно сделать более читабельно при помощи PROMPT_COMMAND :
Вот пример, который показывает статус ошибки только в случае не нулевого статуса:
Советы и подсказки
Разные цвета при вводе текста и при выводе
Если вы не сбросили цвет текста в конце вашего промпта, то этим цветом будут отображаться как текст который вы вводите, так и текст консоли. Если вы хотите задать определённый цвет для ввода, но при этом чтобы цвет вывода команд остался по умолчанию, вам нужно будет сбросить цвет после нажатия Enter , но до того, как какая-либо команда будет запущена. Вы можете сделать это установив DEBUG trap, например так:
/.bashrc trap ‘printf «\e[0m» «$_»‘ DEBUG
Случайные цитаты при входе
Для коричневого приглашения Fortune добавьте:
Раскрашенные последние новости Arch при входе
Чтобы читать 10 latestпоследних пунктов новостей с Arch official website, пользователь grufo написал маленький и цветной скрипт для извлечения RSS (scrollable):
The latest and greatest news from the Arch Linux distribution.
en-us Sun, 04 Nov 2012 16:09:46 +0000
Tom Gundersen wrote: As systemd is now the default init system, Arch Linux is receiving minimal testing on initscripts systems. Due to a lack of resources and interest, we are unlikely to work on fixing initscripts-specific bugs, and may close them as WONTFIX. We therefore strongly encourage all users to migrate to systemd as soon as possible. See the systemd migration guide [ https://wiki.archlinux.org/index.php/Systemd ]. To ease the transition, initscripts support will remain in the official repositories for the time being, unless otherwise stated. As of January 2013, we will start removing initscripts support (e.g., rc scripts) from individual packages without further notice.
Pierre Schmitz wrote: The latest snapshot of our install and rescue media can be found on our Download [ https://www.archlinux.org/download/ ] page. The 2012.11.01 ISO image mainly contains minor bug fixes, cleanups and new packages compared to the previous one: * First media with Linux 3.6 * copytoram=n can be used to not copy the image to RAM on network boot. This is probably unreliable but an option for systems with very low memory. * cowfile_size boot parameter mainly for persistent COW on VFAT. See the README [ https://projects.archlinux.org/archiso.git/plain/docs/README.bootparams?id=v4 ] file for details.
Allan McRae wrote: The number of bugs in the Arch Linux bug tracker is creeping up so it is time for some extermination. This is a great way for the community to get involved and help the Arch Linux team. The process is simple. First look at a bug for your favorite piece of software in the bug tracker and check if it still occurs. If it does, check the upstream project for a fix and test it to confirm it works. If there is no fix available, make sure the bug has been filed in the upstream tracker. Join us on the #archlinux-bugs IRC channel. We are spread across timezones, so people should be around all day.
Allan McRae wrote: With GNOME 3.6, polkit and networkmanager moving to [extra], ConsoleKit has now been removed from the repositories. Any package that previously depended on it now relies on systemd-logind instead. That means that the system must be booted with systemd to be fully functional. In addition to GNOME, both KDE and XFCE are also affected by this change.
Thomas Bächler wrote: The base group now contains the systemd-sysvcompat package. This means that all new installations will boot with systemd by default. As some packages still lack native systemd units, users can install the initscripts package and use the DAEMONS array in /etc/rc.conf to start services using the legacy rc.d scripts. This change does not affect existing installations. For the time being, the initscripts and sysvinit packages remain available from our repositories. However, individual packages may now start relying on the system being booted with systemd. Please refer to the wiki [ https://wiki.archlinux.org/index.php/Systemd ] for how to transition an existing installation to systemd.
Pierre Schmitz wrote: The October release of the Arch Linux install medium is available for Download [ https://www.archlinux.org/download/ ] and can be used for new installs or as a rescue system. It contains a set of updated packages and the following notable changes: * systemd is used to boot up the live system. * initscripts are no longer available on the live system but are still installed by default on the target system. This is likely to change in the near future. * EFI boot and setup has been simplified. * gummiboot is used to display a menu on EFI systems. * The following new packages are available on the live system: ethtool, fsarchiver, gummiboot-efi, mc, partclone, partimage, refind-efi, rfkill, sudo, testdisk, wget, xl2tpd
Pierre Schmitz wrote: As is customary by now there is a new install medium available at the beginning of this month. The live system can be downloaded from Download [ https://www.archlinux.org/download/ ] and be used for new installs or as a rescue system. In addition to a couple of updated packages and bug fixes the following changes stand out: * First medium with Linux 3.5 (3.5.3) * The script boot parameter works again (FS#31022 [ https://bugs.archlinux.org/task/31022 ]) * When booting via PXE and NFS or NBD the ISO will be copied to RAM to ensure a more stable usage. * The live medium contains usb_modeswitch and wvdial which e.g. allows to establish a network connection using an UMTS USB dongle * Furthermore the newest versions of initscripts, systemd and netcfg are included.
Andreas Radke wrote: The fontconfig 2.10.1 update overwrites symlinks created by the former package version. These symlinks need to be removed before the update:
rm /etc/fonts/conf.d/20-unhint-small-vera.conf rm /etc/fonts/conf.d/20-fix-globaladvance.conf rm /etc/fonts/conf.d/29-replace-bitmap-fonts.conf rm /etc/fonts/conf.d/30-metric-aliases.conf rm /etc/fonts/conf.d/30-urw-aliases.conf rm /etc/fonts/conf.d/40-nonlatin.conf rm /etc/fonts/conf.d/45-latin.conf rm /etc/fonts/conf.d/49-sansserif.conf rm /etc/fonts/conf.d/50-user.conf rm /etc/fonts/conf.d/51-local.conf rm /etc/fonts/conf.d/60-latin.conf rm /etc/fonts/conf.d/65-fonts-persian.conf rm /etc/fonts/conf.d/65-nonlatin.conf rm /etc/fonts/conf.d/69-unifont.conf rm /etc/fonts/conf.d/80-delicious.conf rm /etc/fonts/conf.d/90-synthetic.conf pacman -Syu fontconfig
Main systemwide configuration should be done by symlinks (especially for autohinting, sub-pixel and lcdfilter):
cd /etc/fonts/conf.d ln -s ../conf.avail/XX-foo.conf
Florian Pritz wrote: Users of netcfg should configure all interfaces in /etc/conf.d/netcfg rather than /etc/rc.conf.
Pierre Schmitz wrote: The August snapshot of our live and install media comes with updated packages and the following changes on top of the previous ISO image [ /news/install-media-20120715-released/ ]: * GRUB 2.0 instead of the legacy 0.9 version is available. * The Installation Guide [ https://wiki.archlinux.org/index.php/Installation_Guide ] can be found at /root/install.txt. * ZSH with Grml’s configuration [ http://grml.org/zsh/ ] is used as interactive shell to provide a user friendly and more convenient environment. This includes completion support for pacstrap, arch-chroot, pacman and most other tools. * The network daemon is started by default which will automatically setup your network if DHCP is available. Note that all these changes only affect the live system and not the base system you install using pacstrap. The ISO image can be downloaded from our download page [ /download/ ]. The next snapshot is scheduled for September.
Чтобы получить только самую последнюю новость, воспользуйтесь этим:
Страница по адресу http://ascii-table.com/ansi-escape-sequences.php описывает некоторые доступные цветовые последовательности. Следующая Bash функция отображает таблицу с готовыми к копированию управляющими кодами.
Раскрашенное git приглашение
Укажите /usr/share/git/completion/git-prompt.sh вашему шеллу:
и используйте __git_ps1 внутри PS1 или PROMPT_COMMAND . Смотрите Don’t Reinvent the Wheel для подробностей.
Как настроить приглашение терминала Ubuntu
Большинство систем Ubuntu используют bash или dash в качестве приложения терминала по умолчанию. Вы вводите команды в стандартной командной строке, которая обычно отображает ваше имя пользователя, имя хоста и текущий каталог в предопределенной цветовой схеме. Bash предоставляет множество опций настройки командной строки, которые позволяют не только добавлять различные функции в приглашение терминала, но и различать их разными цветами.
В этой статье мы на различных примерах настроим и изменим цвет командной строки нашего терминального приложения, чтобы вы могли сделать то же самое при необходимости.
Просмотр текущей конфигурации интерпретатора Bash
Когда вы открываете терминал через Dash или сочетание клавиш Ctrl+Alt +T, вы видите следующее приглашение:
В этом формате по умолчанию указывается имя пользователя, имя хоста, а затем текущий каталог пользователя. bash берет эту конфигурацию из файла bashrc, который устанавливается индивидуально для каждого пользователя в его домашнем каталоге. Вот как можно открыть этот файл:
Вы также можете использовать любой другой текстовый редактор для открытия этого файла.
Вот как выглядит этот конфигурационный файл. Здесь мы показываем соответствующую часть файла.
Переменная PS1, которую вы видите на рисунке выше, содержит все необходимые настройки для приглашения bash. Давайте сначала объясним, что обозначают символы в этой переменной. Вы можете увидеть эту переменную в переменной PS1, указанной после оператора else.
\u- Это указывает на имя пользователя текущего пользователя
\h: Это указывает на имя хоста текущего пользователя, извлеченное из полного доменного имени.
\w: Указывает текущий рабочий каталог. Ваш домашний каталог обозначается символом тильды
.
\$: Указывает, являетесь ли вы обычным пользователем ($) или пользователем root (#).
Вы также можете просмотреть конфигурацию переменной PS1, передав ее значение эхом следующим образом:
Настройка оболочки
После того как мы увидели, где хранится информация о приглашении терминала и что описывает переменная PS1, давайте посмотрим, как ее можно отредактировать, чтобы настроить приглашение bash.
Прежде чем редактировать переменную PS1, важно сохранить ее содержимое по умолчанию в новой переменной. Это поможет нам восстановить исходную конфигурацию приглашения, если что-то пойдет не так. Введите следующую команду в терминале:
Теперь в переменной «DEFAULT» есть вся информация, необходимая для восстановления стандартных настроек.
Теперь давайте немного поэкспериментируем с нашей переменной PS1. Введите следующую команду:
Это новое значение PS1 окажет следующий эффект на вашу приглашение терминала:
Теперь вы можете видеть только имя пользователя и информацию о пользователе root без каких-либо цветов, так как информация о цвете еще не задана.
Давайте введем следующую команду, чтобы в нашей приглашении также был указан наш рабочий каталог
Это новое значение PS1 окажет следующий эффект на приглашение терминала:
Установка значения настроек приглашения терминала по умолчанию
Поскольку мы сохранили исходную конфигурацию переменной PS1 в переменной DEFAULT, мы можем вернуть значение PS1 к значению по умолчанию, передав ему значение нашей переменной DEFAULT.
Что еще можно настроить?
Если вы хотите, чтобы ваш запрос содержал определенный пользовательский текст, вы можете использовать следующий синтакс:
Я настроил свой запрос на включение пользовательского сообщения следующим образом:
Вы можете включить в приглашение следующие основные символы:
Символы | Назначение |
\d | Дата в формате день месяц дата. |
\e | Символ звонка. |
\a | Символ эвакуации. |
\h | Имя хоста текущего пользователя до ‘.’. |
\H | Имя хоста текущего пользователя. |
\l | Основное имя терминального устройства. |
\j | Количество заданий, выполняемых оболочкой. |
\r | Возврат каретки. |
\n | Новая строка. |
\u | Имя пользователя текущего пользователя. |
\v | Версия Bash. |
\! | Номер истории печати выполняемой команды. |
Вы можете включить текущее системное время в приглашение с помощью следующей команды:
Это новое значение PS1 будет иметь следующий эффект:
Вы также можете настроить приглашение так, чтобы она включала вывод команды; это дает вам неограниченные возможности для включения.
В этом примере я задам в приглашении терминала имя основной группы, к которой принадлежит текущий пользователь.
Изменение цвета приглашения
После настройки приглашения терминала вы поймете, что все может выглядеть несколько беспорядочно. Причина в том, что не так-то просто отличить одну функцию от другой, если все они перечислены одним цветом. Теперь давайте узнаем, как изменить цвет пришлашения, чтобы сделать ее более приятной для глаз.
Для того чтобы добавить цвета к одной или нескольким характеристикам, в переменной PS1 предусмотрены цветовые теги. Выделенный текст на следующем рисунке — это цветовой тег.
Установка цветов в приглашении bash
Вот формат цветового тега:
Например, имя пользователя и имя хоста по умолчанию, которые мы видим в приглашении терминала по умолчанию, являются зелеными из-за следующего цветового тега:
Вы можете изменить это значение цвета для функции bash, чтобы придать ей новый цвет или добавить новый цветовой тег к функции, у которой его нет.
Вот некоторые распространенные цвета и их значения:
Цвет | Значение |
Зеленый | 32 |
Красный | 31 |
Черный | 30 |
Синий | 34 |
Голубой | 36 |
Фиолетовый | 35 |
Желтый | 33 |
Белый | 37 |
Следующая команда сделает текст командной строки красным, так как мы указываем 31 (красный цвет) в теге color:
Использование стилей текста в приглашении
Вы можете добавить стили к тексту приглашения, присвоив значение атрибута тегу color. Вот формат тега color с атрибутом:
Вы можете использовать следующие значения атрибутов для текста приглашения:
Значение | Назначение |
0 | Обычный текст (Это значение по умолчанию, даже если атрибут не установлен) |
1 | В терминале Ubuntu это значение определяет полужирный текст |
2 | Полужирный текст |
4 | Подчеркивание текста |
5 | Для мигающего текста |
7 | Меняет цвета текста и фона |
8 | Для скрытого текста |
Вы можете использовать следующую команду для того, чтобы подчеркнуть текст в bash:
Значение 4 указывает на то, что мы хотим «подчеркнуть» текст.
Внесение постоянных изменений в приглашение
Команды, которые вы выполняли до сих пор, изменяют приглашение только для текущего сеанса bash. После того, как вы поэкспериментировали с настройкой текста и цветом приглашения и пришли к окончательному варианту, который вы хотите установить навсегда для всех ваших сеансов bash, вам нужно отредактировать файл bashrc.
Откройте файл .bashrc и скопируйте значение PS1, которое вы окончательно установили в строке PS1 под строкой if; then. На следующем изображении я только что изменил цвет приглашения bash на красный:
Сохраните файл, нажав Ctrl+X, а затем нажав Y. Изменения в приглашении bash теперь будут постоянными.
Выйдите из Терминала и откройте его снова, чтобы убедиться, что ваш интерпретатор bash по-прежнему будет таким, каким вы его установили.
Потренировавшись по этому руководству, вы сможете преуспеть в настройке приглашения bash. Вы можете установить цвета для различения различных функций, которые вы включили в приглашение. Таким образом, вы сможете просматривать и использовать эту полезную информацию каждый раз, когда используете bash pro
Разноцветные терминалы
В этой публикации я расскажу о некоторых трюках, которые украсят будни любого системного администратора Linux (и не только). Все они связаны с переменной PS1 оболочки bash. Переменная PS1 определяет, как будет выглядеть приглашение для ввода новых команд. И каждый пользователь может переопределять её как пожелает, например, в файле
/.bashrc (который выполняется при запуске bash и используется для в том числе для конфигурации).
Для начала рассмотрим простой вариант, мой любимый формат командной строки.
Результат будет вот такой:
Это обычное использование переменной PS1, но если бы я не начал с этого — рассказ был бы неполным. Обычно в переменной PS1 с помощью специальных последовательностей символов определяют формат приглашения для ввода команд. Подробный список этих последовательностей можно почитать в документации к bash, в данном примере:
- \t — вывод «текущего времени», на самом деле это получается время завершения выполнения предыдущей команды, удобно когда перед глазами.
- j\j — выводит символ j и после него количество запущенных job, т.е. процессов в фоне. Это тоже удобно иметь перед глазами чтобы случаем про них не забыть когда соберешься закрыть терминал.
- \u@\h — имя пользователя и название сервера. Если работаете с несколькими серверами через удаленные терминалы — чтобы не путаться.
- \w — после двоеточия — рабочая директория.
- \n — поскольку строка получилась хоть и информативной (что-то вроде статус бара), но длинной, то приглашаем вводить команды с новой строки, а эта верхняя строка будет наглядно отделять от результата работы предыдущей команды.
- \$ — на новой строке будет выводится символ либо $ для обычного пользователя либо # для root’а и отделив его пробелом можно приглашать вводить новую команду.
У меня .bashrc разделен на два файла, в самом .bashrc содержится общий код для всех серверов, а в .bash_local — уникальные для этого сервера настройки командной строки. .bash_local я буду вставлять в .bashrc специальной директивой. Начнем с .bash_local. В контексте данной статьи там у меня будут две строчки, которые определяют цвет этого сервера:
Просто заношу коды цвета в переменные. Но, как вы заметили, что способ задания цвета для курсора и для текста командной строки — разный. Почему-то так исторический получилось. Чтобы понять, какой цвет каким кодом кодируется, есть подходящая картинка.
Посредине — обозначение цвета для цвета курсора, снизу — обозначение цвета для текста. Как вы можете увидеть, что я для текста и курсора использую цвет морской волны. Т.к. название сервера petrel («буревестник»), то он ассоциируется у меня с этим цветом.
Теперь .bashrc, тоже показываю его не полностью, а только то что имеет отношение к теме:
Тут я вставляю код из .bash_local в общий файл. Таким образом определяться ранее описанные переменные с цветом сервера.
Еще две переменные определяю с чисто красным цветом, он будет использоваться для маркировки терминалов привелигированного пользователя (root’а).
Тут проверяется какой используется терминал. Для любого неизвестного или неподдерживающего цвета будет использоваться приглашение без цвета (PS1=’\t j\j \u@\h:\w\n\$ ‘) так, как я это описал в начале статьи. Но если имя терминала начинается на xterm или rxvt, например, так себя позиционирует терминал Gnome, начинаем кудесить с цветом. Первая строчка — задаем цвет текста — цвет сервера и выводим первую строку приглашения ввода команд. Она всегда будет окрашена в цвет сервера. Вторая строчка — проверяем, работаем ли мы под непривелигированным или привелигированным пользователем (root’ом). Если root — то переопределяем цвета на красный. Третья строчка — формируем вторую строчку приглашения и определяем цвет курсора в терминале. Т.е. там у нас получится либо $ и через пробел курсор, оба покрашенные в цвет сервера, если пользователь обычный. Либо красный # и через пробел красный курсор, если это root.
А это, если честно, один в один скопированно из первоначального .bashrc от Дебиана. Знаю, что этот код видоизменяет title bar у окна, размещает там информацию об пользователе, сервере и домашней директории. Но поскольку этот код придумал не я, комментировать его не буду.
В результате у нас должно получится так, как на картинке в самом начале публикации.