[xfce4] Как изменить приглашение командной строки в Terminal?
В xfce4 по умолчанию в Terminal у меня стоит приглашение командной строки вида bash-3.1$. Как его можно поменять? Хочу сделать приглашение как в настоящей консоли вида @:$.
Betanuzir
07.05.09 16:48:49 MSD

Re: [xfce4] Как изменить приглашение командной строки в Terminal?
В .bashrc PS1=’\u@\h:\w$’
Sekai ☆
( 07.05.09 16:54:16 MSD )
Re: [xfce4] Как изменить приглашение командной строки в Terminal?
Сработало. Но попутно возник вопрос: почему в консоли (не в иксовом эмуляторе консоли, а именно в консоли, которая остаётся после выхода из иксов) приглашение имеет такой вид даже без установки значения PS1 вручную?
Betanuzir
( 07.05.09 17:29:11 MSD ) автор топика

Re: [xfce4] Как изменить приглашение командной строки в Terminal?
из за разницы в запуске $SHELL
если bash запускается как login shell то читается /etc/profile , ~/.bash_profile
если нет — не читается
~/.bashrc читается всегда
Sylvia ★★★★★
( 07.05.09 17:35:51 MSD )
Re: [xfce4] Как изменить приглашение командной строки в Terminal?
Т.е. изменять приглашение придётся для каждого пользователя по отдельности? Для всех сразу нельзя?
Betanuzir
( 07.05.09 17:45:27 MSD ) автор топика

Re: [xfce4] Как изменить приглашение командной строки в Terminal?
FILES
/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
/etc/bash.bashrc
The systemwide per-interactive-shell startup file
/etc/bash.logout
The systemwide login shell cleanup file, executed when a login shell exits
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file
если для всех — /etc/bash.bashrc
Sylvia ★★★★★
( 07.05.09 17:50:41 MSD )
Re: [xfce4] Как изменить приглашение командной строки в Terminal?
Написал в /etc/bash.bashrc. Не помогло. Правда, файла такого, bash.bashrc, в /etc/ не было. Пришлось вручную создавать и выдавать всем права на выполнение. В /etc/profile вызова /etc/bash.bashrc тоже не нашёл. Или он не оттуда должен вызываться? Может в моём случае он не в /etc/лежать должен? ОС: Slackware 12.2.
Как изменить приглашение командной оболочки bash в Linux?
В Linux существенная часть работы выполняется из командной оболочки. Одной из самых популярных командных оболочек является bash (сокр. от «Bourne-Again shell»). bash интерпретирует ваши команды и передает их для выполнения операционной системе.
Оглавление:
- Что такое приглашение командной оболочки?
- Стейтменты приглашения bash
- Изменение приглашения bash
- Константное изменение приглашения bash
- Временное изменение приглашения bash
- Популярные пользовательские параметры приглашения bash
- Отображение имени пользователя и имени хоста
- Добавление специальных символов
- Отображение имени пользователя, имени оболочки и версии оболочки
- Добавление даты и времени в приглашение bash
- Убираем всю информацию из приглашения bash
- Отделение обычных пользователей от root
- Дополнительные параметры оболочки
- Добавление в приглашение bash выполнения команды
- Как изменить цвет приглашения bash?
- Откат изменений к настройкам по умолчанию
- Заключение
Что такое приглашение командной оболочки?
Всякий раз, когда мы открываем окно терминала, мы видим приглашение командной оболочки:
имя_пользователя — имя пользователя, который в данный момент вошел в систему;
имя_хоста — имя хоста системы;
~ (тильда) — означает, что в данный момент мы находимся в домашнем каталоге /home/ ;
$ — означает, что текущий пользователь является обычным пользователем (а знак решетки # дает понять, что текущим пользователем является пользователь root).
Стейтменты приглашения bash
bash содержит 4 различных стейтменты приглашения (PS от англ. «Prompt Statement»):
PS1 — это основное приглашение, которое отображается перед каждой командой; по этой причине оно и модифицируется чаще всего.
PS2 — отображается в тех случаях, когда команде требуются дополнительные данные для ввода (например, при использовании многострочных команд).
PS3 — отображается при работе со встроенной в оболочку командой интерактивного меню select .
PS4 — используется для запуска сценария оболочки в режиме отладки.
До сих пор мы работали только с PS1. В большинстве случаев вы будете работать только с PS1 и, возможно, с PS2.
Чтобы увидеть текущее значение PS1, введите следующее:
В зависимости от системы терминал вернет что-то вроде этого:

Теперь посмотрим, что у нас содержится в PS2:
Как видите, здесь у нас только одна угловая скобка:
Повторение той же команды для PS3 вообще вернет полностью пустую строку.
Для PS4 вы увидите знак + .
Изменение приглашения bash
Поведение bash задается через соответствующий файл конфигурации .bashrc, расположенный в домашнем каталоге пользователя. Если имя вашего пользователя, например, diego, то путь к файлу будет следующим:
Или более краткий вариант:
Прежде чем вносить какие-либо изменения в него, настоятельно рекомендуется создать резервную копию данного файла. Для этого откройте окно терминала и введите следующее:
cp ~/.bashrc ~/.bashrc.bak
Примечание: Расширение .bak (от англ. «backup») сообщает нам, что файл является резервной копией.
Константное изменение приглашения bash
Откройте для редактирования файл конфигурации bash:
sudo nano ~/.bashrc
В этом файле вы должны увидеть несколько различных настроек. Некоторые из них в данный момент неактивны и представляют собой обычные комментарии — строки синего или сине-зеленого цвета, отмеченные знаком # . Строки белого цвета используются оболочкой для настройки её поведения.
Прокрутите страницу до конца файла конфигурации и добавьте следующую строку:

Вы можете заменить часть RavesliPrompt> любой строкой текста, которая вам придется по душе.
Сохраните файл (сочетание клавиш Ctrl+O, и затем Enter) и выйдите из редактора (Ctrl+X).
Обновите bash, чтобы применить изменения:
В результате наших манипуляций приглашение оболочки должно измениться на следующее:

Временное изменение приглашения bash
Вы можете временно изменить приглашение оболочки bash с помощью команды export. Изменения оболочки, внесенные данной командой, будут активны ровно до тех пор, пока пользователь не выйдет из системы.
Давайте зададим такой вид приглашения, при котором будет отображаться только имя пользователя:
В результате, приглашение оболочки должно немедленно принять вот такую форму:

Вы можете откатить вышеприведенные изменения, просто выйдя и заново зайдя в систему.
Популярные пользовательские параметры приглашения bash
Вы можете использовать следующие параметры с любым методом изменения приглашения bash: временным (с помощью команды export ) или постоянным (отредактировав файл .bashrc).
Отображение имени пользователя и имени хоста
Используйте опцию -H для отображения полного имени хоста:
Вы должны увидеть имя хоста в приглашении:

Добавление специальных символов
Вы можете добавить в приглашение оболочки специальные символы, расположив их вместе с уже знакомыми вам опциями:
В результате будет отображаться следующее:
Примечание: Я рекомендуем вам сделать так, чтобы приглашение оканчивалось специальным символом или пробелом: двоеточие, угловая скобка или символ пробела непосредственно перед последней кавычкой. Это поможет пользователям визуально отделить приглашение оболочки от вводимой ими в данный момент команды.
Отображение имени пользователя, имени оболочки и версии оболочки
Введите следующую команду, чтобы отобразить имя пользователя, название оболочки ( s от англ. «shell») и её версию ( v от англ. «version»):
Приглашение должно измениться на следующее:

Добавление даты и времени в приглашение bash
Используйте следующие параметры для отображения различных форматов даты и времени:
\d — отображает текущую дату в формате [день_недели]/[месяц]/[число]:
\t — отображает текущее время в 24-часовом формате:
\T — отображает текущее время в 12-часовом формате:
\A — отображает текущее время в 24-часовом формате, но без секунд:
Примечание: Параметры \u@\H , предшествующие параметру даты и времени, добавляют имя пользователя ( u от англ. «username») и имя хоста ( H от англ. «Hostname»).
Убираем всю информацию из приглашения bash
Используйте эту возможность, чтобы скрыть отображение имен пользователей или имени хоста в приглашении:
Вы должны увидеть следующее:
Отделение обычных пользователей от root
В стандартном приглашении оболочки знак $ указывает на обычного пользователя. Если вы входите в систему как пользователь root, то отображается знак # .
Используйте символ $ , чтобы указать, что текущий пользователь не является пользователем root:
Дополнительные параметры оболочки
Ниже представлен список большинства параметров, которые вы можете использовать для настройки приглашения bash. Стоит оговориться, что не все из них могут поддерживаться конкретным Linux-дистрибутивом:
\a — звуковой сигнал;
\d — дата (день/месяц/число);
\D — форматированный вывод текущего времени;
\e — символ escape-последовательности;
\h — имя хоста (короткое, до первой точки);
\H — полное имя хоста (доменное имя);
\j — количество задач, обрабатываемых оболочкой в данный момент;
\l — название терминала;
\n — переход на новую строку;
\r — возврат каретки на начало строки;
\s — название оболочки;
\t — время в 24-часовом формате (час:минута:секунда);
\@ — время в 12-часовом формате (AM/PM);
\A — время в 24-часовом формате без секунд;
\u — текущее имя пользователя;
\V — дополнительная информация о версии bash (номер релиза, патча);
\w — текущий рабочий каталог;
\W — базовое имя рабочего каталога;
\! — отображает номер, под которым команда будет занесена в историю команд bash;
\# — отображает номер команды в текущем сеансе без привязки к истории. При запуске нового терминала, нумерация начинается с единицы;
\$ — если пользователем является root, то используется символ # , в противном случае — символ $ ;
\\ — обратная косая черта;
\[ — начало последовательности непечатаемых символов (полезно, если вы хотите изменить цвет, добавить команду или набор инструкций в приглашение);
\] — конец последовательности непечатаемых символов.
Добавление в приглашение bash выполнения команды
Есть еще один трюк, с которым полезно ознакомиться: вы можете добавить в приглашение командной оболочки вывод любой команды. Всякий раз, когда появляется приглашение оболочки, bash запускает команду и отображает её вывод. Для этого просто добавьте имя любой команды, которую вы хотите запустить, между двумя символами машинописного обратного апострофа (кнопка Ё на английской раскладке клавиатуры):

В качестве другого примера, предположим, что вы хотите просмотреть время безотказной работы системы и среднее значение нагрузки, отображаемое командой uptime . Вы можете использовать следующую конструкцию, которая помещает время безотказной работы в свою собственную строку перед остальной частью приглашения:
Как изменить цвет приглашения bash?
Параметры цвета строки приглашения задаются в виде следующей последовательности — \e[X;Y;Zm , где:
\e[ — часть с escape-символом, обозначающая начало изменения цвета;
X — код атрибута текста:
0 — нормальный;
1 — жирный (яркий);
2 — тусклый;
4 — подчеркнутый;
Y — цветовой код текста:
30 — черный;
31 — красный;
32 — зеленый;
33 — коричневый;
34 — синий;
35 — фиолетовый;
36 — голубой;
37 — светло-серый.
Z — цветовой код фона:
40 — черный;
41 — красный;
42 — зеленый;
43 — коричневый;
44 — синий;
45 — фиолетовый;
46 — голубой;
47 — светло-серый.
m — символ, указывающий на конец блока с цветовым кодом.
Примечание: Для того, чтобы терминал корректно выполнил обработку нашей последовательности, необходимо её поместить между символами \[ и \] , т.е. \e[X;Y;Zm станет \[\e[X;Y;Zm\] .
Рассмотрим пример, который временно изменяет текст и цвет строки приглашения на зеленый:
\[ — сочетание символов, обозначающее начало блока изменения атрибутов текста;
\e[ — сочетание символов, обозначающее начало блока цветового кода;
0;32 — цветовой код ( 0 — обычный текст, 32 — зеленый цвет);
m — символ, указывающий на конец блока с цветовым кодом;
\] — сочетание символов, обозначающее конец блока изменения атрибутов текста;
[\u@\h \W]\$ — код, задающий стандартный вид приглашения оболочки;
\[ — сочетание символов, обозначающее начало блока изменения атрибутов текста;
\e[ — сочетание символов, обозначающее начало блока цветового кода;
0 — цветовой код ( 0 — обычный текст белого цвета)
m — символ, указывающий на конец блока с цветовым кодом;
\] — сочетание символов, указывающее на конец блока с цветовым кодом.
В результате мы получим следующее:

Кроме того, если вы скомбинируете опцию яркости с цветовым кодом, то получите более светлую версию заданного цвета. Например, если вы используете цветовой код 1;32 , то получите светло-зеленый цвет вместо обычного зеленого. Если вы используете 1;33 , то получите желтый цвет вместо коричневого.
Откат изменений к настройкам по умолчанию
Есть два способа сбросить вышепредставленные изменения. Для временных изменений (введенных с помощью команды export PS1=»» ) достаточно просто выйти из системы.
Если же вы редактировали файл .bashrc, то есть два способа вернуться к настройкам по умолчанию:
Способ №1: Закомментируйте свои изменения в файле, добавив в начале каждой строки символ # .
Способ №2: Восстановите настройки из резервной копии, введя:
sudo cp ~/.bashrc.bak ~/.bashrc
Заключение
Вышеприведенные примеры являются лишь небольшой демонстрацией того, каким образом настраивается внешний вид приглашения оболочки. Не стесняйтесь экспериментировать с различными специальными символами, командами и параметрами, чтобы создать свой вид идеальной командной строки.
Bash (Русский)/Prompt customization (Русский)
Состояние перевода: На этой странице представлен перевод статьи Bash/Prompt customization. Дата последней синхронизации: 10 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
В Bash существует несколько приглашений командной строки, каждое из которых можно настроить на основе личных представлений об удобстве и эстетичности.
Приглашения
Bash имеет четыре строки приглашения, каждая из которых может быть настроена.
- PS1 — основное приглашение, которое отображается перед каждой командой; по этой причине модифицируется чаще всего.
- PS2 — второе приглашение, отображается, если команде требуются дополнительные данные для ввода (например, в случае многострочных команд).
- PS3 — используется довольно редко. Отображается при работе встроенной команды Bash select , выводящей интерактивное меню. В отличие от остальных приглашений, не раскрывает escape-последовательности Bash. Обычно все изменения применяются непосредственно в скрипте, содержащем select , а не в файле .bashrc .
- PS4 — также используется редко. При отладке скриптов показывает уровни вложенности — первый символ приглашения повторяется столько раз, сколько на данный момент задействовано уровней.
Настройка конкретного приглашения подразумевает присваивание (обычно в файле ~/.bashrc ) необходимой строки в переменную, например:
Техники
Приглашение всегда можно задать строкой в явном виде, но существует ряд техник, позволяющих сделать его более динамичным и полезным.
Escape-последовательности Bash
При выводе строки приглашения Bash ищет экранированные символом слэша символы (escape-последовательности) и конвертирует их в специальные строки. Например, \u превратится в имя пользователя, а \A — в текущее время. Таким образом, если переменной PS1 присвоить ‘\A \u $ ‘ , то приглашение будет выглядеть как 17:35 пользователь $ .
Полный список escape-последовательностей можно найти в руководстве bash(1) § PROMPTING и в справочнике Bash.
Escape-последовательности terminfo
Помимо escape-последовательностей, которые понимает Bash, большинство терминалов также распознают специальные последовательности, которые влияют на терминал сам по себе, а не на печатаемые символы. Например, так можно изменить цвет строки символов, сдвинуть курсор в произвольную позицию или очистить экран. Эти последовательности могут быть довольно неудобными и варьируются от терминала к терминалу, поэтому они задокументированы в базе данных terminfo. Чтобы увидеть, какие свойства поддерживает ваш терминал, выполните:
$ infocmp
Значение свойств можно найти в terminfo(5) по их названиям (часть перед =). Например, свойство setaf настраивает цвет шрифта для всего текста, который будет напечатан после него. Узнать escape-код свойства можно командой tput . Например,
$ tput setaf 2
выведет escape-последовательности для настройки зелёного цвета шрифта.
Примечание: Если команда tput не работает, убедитесь, что значение TERM имеет верное значение для вашего терминала. Например, если установлено значение xterm вместо xterm-256color , то tput setaf будет работать только с номерами цветов 0-7.
На практике, чтобы использовать эти возможности в приглашении командной строки, можно использовать подстановку команд Bash и интерполяцию строк. Например:
GREEN="\[$(tput setaf 2)\]" RESET="\[$(tput sgr0)\]" PS1="$my prompt$> "
Примечание: Руководство Bash рекомендует «обернуть» вывод tput в \[ \] . Это поможет Bash правильно учитывать непечатаемые символы при вычислении длины приглашения. При подстановке команд это не работает, поэтому используйте значения \1 \2 .
Escape-последовательности ANSI
К сожалению, ANSI-последовательности могут отсутствовать в базе terminfo вашего терминала. Чаще всего это касается последовательностей для новейших возможностей вроде поддержки 256 цветов. В этом случае использовать tput не получится и придётся вводить escape-последовательности вручную.
Примеры escape-последовательностей можно найти в статье Управляющие последовательности ANSI. Каждая последовательность начинается с литерала escape-последовательности, которую вы можете ввести с помощью escape-последовательности Bash \e . Например, \e[48;5;209m задаст персиковый цвет фона (если есть поддержка 256 цветов), а \e[2;2H сдвинет курсор в левый верхний угол экрана.
В случаях, когда escape-последовательности Bash не поддерживаются (как в приглашении PS3), их можно добавить командой printf:
ESC=$(printf "\e") PEACH="$ESC[48;5;209m"
Встроенные команды
Если вы хотите добавить вывод какой-нибудь команды в приглашение, то используйте подстановку команд (command substitution). Например, чтобы добавить величину свободной памяти к приглашению попробуйте что-то вроде:
PS1="$(awk '/MemFree/' /proc/meminfo) prompt > "
53718 prompt > 53718 prompt > 53718 prompt >
Как видно, это работает не совсем корректно — значение памяти всегда одно и то же! Причина — команда выполняется только один раз при первой настройке PS1. Необходимо предотвратить подстановку либо экранированием символа $ , либо определением строки в одиночных кавычках — в обоих случаях подстановка будет производиться каждый раз при настоящем отображении приглашения:
PS1="\$(awk '/MemFree/' /proc/meminfo) prompt > " # или PS1='$(awk "/MemFree/" /proc/meminfo) prompt > '
Если команды сделали приглашение слишком длинным, для лучшей читабельности можно вынести их в функцию:
free_mem() < awk '/MemFree/' /proc/meminfo > PS1='$(free_mem) prompt > '
Примечание: В подстановочных функциях можно использовать escape-последовательности terminfo/ANSI, но не последовательности Bash. В частности, \[ \] не будет работать при обрамлении ими строки с непечатаемыми символами. Вместо этого используйте восьмеричные экранированные последовательности \001 и \002 (например, в командах printf или echo -e ).
PROMPT_COMMAND
Переменной PROMPT_COMMAND можно присвоить произвольную команду, которая будет выполняться непосредственно перед выводом PS1. Это позволяет создавать довольно мощные эффекты. Например, можно переназначить PS1 на основе некоторых условий, или выполнить какие-то действия с историей Bash при выполнении любой команды.
Важно: PROMPT_COMMAND не должна использоваться для вывода символов непосредственно в приглашение. Символы, напечатанные вне PS1, не учитываются Bash, что может привести к неправильному позиционированию курсора и обычных символов. Либо используйте PROMPT_COMMAND для задания PS1, либо изучите рекомендации в разделе #Встроенные команды.
Совет: Если PROMPT_COMMAND стала слишком сложной, bash-preexec (реализация хук-функций preexec и precmd Zsh для Bash) может упростить работу с ней.
Escape-последовательности между вводом и выводом
Свойства вводимого текста можно изменить, «забыв» отключить свойства в конце PS1. Например, если вставить tput blink в конец PS1, то вводимые команды будут мерцать. Тем не менее, этот эффект также перейдёт и на вывод команды, поскольку свойства не отключаются при нажатии Enter .
Чтобы вставить escape-последовательность после ввода, но перед началом вывода, можно перехватить (trap) Bash-сигнал DEBUG, который посылается перед выполнением каждой команды:
$ trap 'tput sgr0' DEBUG
Настройка приглашения root
Для удобства можно сделать приглашение командной строки root-пользователя визуально отличным от обычного (возможно, мерцающий красный цвет?). Настройка приглашения производится как обычно, но в домашнем каталоге суперпользователя, /root . Начните с копирования шаблонов /etc/skel/.bash_profile и /etc/skel/.bashrc в каталог /root , после чего внесите в файл /root/.bashrc необходимые изменения.
Примеры
Цвета
Совет: Вывод infocmp содержит доступное для tput количество цветов, например — colors#8 .
Увидеть все цвета вашего терминала можно с помощью простого цикла (замените setab на setaf , если нужен цвет текста, а не фона):
for C in ; do tput setab $C echo -n "$C " done tput sgr0 echo
Если это не работает (причём установлено правильное значение TERM), протестируйте вручную разные последовательности:
# стандартные цвета for C in ; do echo -en "\e[$m$C " done # цвета высокой интенсивности for C in ; do echo -en "\e[$m$C " done # 256 цветов for C in ; do echo -en "\e[48;5;$m$C " done echo -e "\e(B\e[m"
Аналогичные значения для текста (не фона): стандартные — 30..37 , высокая интенсивность — 90..97 , а для 256 цветов замените 48 на 38.
Основные свойства
Следующие свойства terminfo будут полезны при настройке приглашения и поддерживаются во многих терминалах. #1 и #2 необходимо заменить на числовые аргументы.
| Свойство | Escape-последовательность | Описание |
|---|---|---|
| Свойства текста | ||
| blink | \E[5m | мерцающий тект вкл |
| bold | \E[1m | полужирный текст вкл |
| dim | \E[2m | тусклый текст вкл |
| rev | \E[7m | обратное отображение вкл (текст/фон меняются цветами) |
| sitm | \E[3m | курсив вкл |
| ritm | \E[23m | курсив выкл |
| smso | \E[7m | выделение текста вкл |
| rmso | \E[27m | выделение текста выкл |
| smul | \E[4m | подчёркивание вкл |
| rmul | \E[24m | подчёркивание выкл |
| setab #1 | \E[4#1m | задать цвет фона #1 (0-7) |
| setaf #1 | \E[3#1m | задать цвет текста #1 (0-7) |
| sgr0 | \E(B\E[m | отключить все атрибуты текста |
| Перемещение курсора | ||
| sc | \E7 | сохранить позицию курсора |
| rc | \E8 | вернуть курсор в сохранённую позицию |
| clear | \E[H\E[2J | очистить экран и переместить курсор в левый верхний угол |
| cuu #1 | \E[#1A | переместить курсор вверх на #1 строк |
| cud #1 | \E[#1B | переместить курсор вниз #1 строк |
| cuf #1 | \E[#1C | переместить курсор вправо #1 столбцов |
| cub #1 | \E[#1D | переместить курсор влево #1 столбцов |
| home | \E[H | переместить курсор в левый верхний угол окна |
| hpa #1 | \E[#1G | переместить курсор в столбец #1 |
| vpa #1 | \E[#1d | переместить курсор в строку #1, первый столбец |
| cup #1 #2 | \E[#1;#2H | переместить курсор в строку #1, столбец #2 |
| Удаление символов | ||
| dch #1 | \E#1P | удалить #1 символов (аналогично нажатию клавиши backspace) |
| dl #1 | \E#1M | удалить #1 строк |
| ech #1 | \E#1X | стереть #1 символов (без перемещения курсора) |
| ed | \E[J | очистить до нижнего края экрана |
| el | \E[K | очистить до конца строки |
| el1 | \E[1K | очистить до начала строки |
Отображение кода выхода
Тем же приёмом, как в случае встроенных команд, можно отложить интерполяцию специальной переменной Bash вроде $? . Следующие приглашения будут содержать код выхода предыдущей команды:
PS1="\$? > " # или PS1='$? > '
0 > true
0 > false
1 >
Это можно сделать с помощью условных выражений и функций:
exitstatus() < if [[ $? == 0 ]]; then echo ':)' else echo 'D:' fi >PS1='$(exitstatus) > '
🙂 > true
🙂 > false
D: >
Позиционирование курсора
Курсор можно перемещать по экрану во время нахождения «внутри» приглашения PS1, чтобы разные части приглашения появлялись в разных местах. Важный момент — после всех перемещений и вывода символов в любых местах экрана курсор необходимо вернуть в исходную позицию. Это можно сделать с помощью свойств sc и rc , которые сохраняют и восстанавливают позицию курсора соответственно. Общая схема приглашения, содержащего перемещения курсора:
Весь блок с перемещениями курсора обёрнут в \[ \] , чтобы Bash не учитывал непечатаемые символы как часть приглашения.
Выравнивание по правому краю
Простейший способ напечатать текст у правого края экрана — использовать printf:
rightprompt() < printf "%*s" $COLUMNS "right prompt" >PS1='\[$(tput sc; rightprompt; tput rc)\]left prompt > '
left prompt > right prompt
Здесь задано поле %*s переменной длины с выравниванием по правому краю. Размер поля равен текущему количеству столбцов в терминале ( $COLUMNS ).
Произвольное позиционирование
Свойство cup перемещает курсор в конкретную позицию экрана, например, tput cup 20 5 переместит курсор на строку 20, столбец 5 (координаты 0 0 обозначают верхний левый угол). cuu , cud , cuf и cub (вверх, вниз, вперёд, назад) перемещают курсор относительно текущей позиции. Например, tput cuf 10 переместит курсор на 10 символов вправо. В аргументах можно использовать переменные LINES и COLUMNS , если требуется переместить курсор относительно нижнего и правого краёв окна. Например, перемещение на 10 строк и 5 столбцов от правого нижнего угла:
$ tput cup $((LINES - 11)) $((COLUMNS - 6))
Настройка названия окна терминала
Название окна терминала можно настроить так же, как и приглашение: выводом escape-последовательностей в оболочке. Часто пользователи встраивают настройки названия окна в своё приглашение. Технически это возможность xterm, но и другие современные терминалы её поддерживают. В этом случае используют последовательности ESC]2;новое названиеBEL , где ESC и BEL — символы escape (выход) и bell (сигнал). С последовательностями Bash приглашение с встроенным названием окна будет иметь вид:
PS1='\[\e]2;новое название\a\]prompt > '
Само собой, строка названия окна может включать вывод встроенных команд или переменные вроде $PWD , так что она может перенастраиваться после каждой команды.
Смотрите также
- Примеры и скриншоты на теме форума: What’s your PS1? (доступно только после входа)
- Файл /etc/bash/bashrc для Gentoo; см. также gentoo-bashrcAUR
- tput(1)
- Цвета и перемещение курсора с tput
Советы и приемы настройки командной строки в Bash Linux

Тот кто начал работать в терминале Linux, знаком со строкой приглашением по умолчанию, в Bash:
[user@$host ~]$
Это вывод переменной окружения PS1 и она, кстати, как и всё в Linux, полностью настраивается и может содержать полезную информацию.
Вот несколько приёмов, которые можно использовать для настройки строки приглашения в Bash.
Как задать свой вид командной строки в Bash?
Строка приглашения в Bash задается переменной окружения PS1 (Prompt Statement 1).
Существует также переменная PS2 , которая используется в случае если команды ввода длинные и требуется разбиение на строки.Вот пример кода который меняет PS1 и PS2 в текущей сессии терминала:
[user@host ~]$ export PS1="[NewPrompt]$ " [NewPrompt] export PS2=". " [NewPrompt] if true; then . echo "Success!" . fi Success!
Где устанавливается (находится) значение PS1?
Значение PS1 устанавливается в ~/.bashrc (в домашней директории пользователя).
Пример строки с PS1 по умолчанию:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ 'Что означают \u, \h, \W, \s, и \v?
Командой man bash , можно найти описание всех специальных символов для переменной PS1 и PS2 .
Ниже приведены параметры по умолчанию:\u : Имя пользователя
\h : Краткое имя хоста до первого символа . (точка)
\W : Текущий относительный путь до рабочего каталога (если домашний каталог, то используется ~ (тильда))
\s : Название оболочки ( bash или sh , в зависимости от того какая оболочка используется)
\v : Версия оболочкиДругие специальные символы которые можно использовать в PS1
Есть целый ряд специальных символов, которые могут быть использованы для настройки приглашения командной строки.
\d : Расширяет формат даты до День недели Месяц Дата (например, «Пт Сен 12»)
\D{fmt} : Позволяет использовать пользовательские форматы даты (команда man strftime покажет подробности)
\D{%с} : Показывает дату и время в текущей локали
\n : Перейти на новую строку
\w : Полный путь к текущей рабочей директории
\H : Полное имя хоста для текущей машины
\! : Номер команды в истории команд (файл .bash_history в домашней директории).Есть много других специальных символов, вы можете увидеть полный список в PROMPTING части Bash man page .
Многострочная строка приглашение
Удобно иметь многострочную строку приглашение, например: в первой строке дата, время и текущая директория, а во-второй строке username@hostname .
Вот пример такой строки:
PS1="\D{%c} \w\n[\u@\H]$ "Что ещё можем сделать со строкой приглашением?
Мы можем разукрасить нашу строку.
Например, дата и время станут красным цветом, каталог синего цвета, а имя пользователя на желтом фоне:PS1="\[\e[31m\]\D{%c}\[\e[0m\]\[\e[36m\]\w\[\e[0m\]\n[\[\e[1;43m\]\u\[\e[0m\]@\H]$ "Рассмотрим этот код:
\[..\] : Объявляет начало и конец ввода непечатаемых символов ( \[ — начало, \] — конец)
\е[ : После этого тега следует особая последовательность вывода, чтобы изменить цвет или другие характеристики
31m : Красный текст ( 41м будет красный фон)
36m : Синий текст
1;43m : Желтый фон ( 1;33m будет желтый текст)
\[\ е[0m\] : Сбрасывает цвета терминала по умолчанию. @\H]$ — вывод на экран этой части строки будет в цветах по умолчаниюРезюме
Строку приглашение можно раскрасить как угодно, можно сделать текст перевернутым или мигающим и т.д.
Всё зависит только от вашей фантазии.