Приглашение ко вводу команд в bash — это строка, которая отображается слева от каждой команды, которую вы вводите в терминале. Обычно приглашение имеет вид пользователь@hostname:директория$
Приглашение можно настраивать. Можно добавлять информацию или, например, изменить цвет приглашения.
В какой переменной задается приглашение
Формат строки приглашения задается в переменной окружения PS1. Чтобы настроить приглашение, необходимо изменить значение переменной PS1.
Например, переменная PS1 может иметь значение:
PS1="u@h:w$"
Или, например, командой echo $PS1 можно вывести текущее значение переменной PS1. У меня в Ubuntu оно выглядит так:
echo $PS1
[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}[3[01;32m]u@h[3[00m]:[3[01;34m]w[3[00m]$
Не пугайтесь. На самом деле существует масса возможностей для настройки строки приглашения. Ниже мы рассмотрим базовые методы настройки.
Как изменить приглашение (только для данной сессии)
Можно установить переменную PS1 только для текущей сессии в терминале. Это удобно, пока вы подбираете, как будет выглядеть строка приглашения. Чтобы это сделать нужно выполнить команду export для переменной PS1, например:
export PS1="u@w:"
После выполнения команды строка приглашения в терминале сразу изменится.
Настройка приглашения
Для задания различных значений переменной PS1 существуют специальные символы. Комбинируя различные специальные символы можно составить свою строку приглашения.
Специальные символы начинаются с символа косой черты «», за которой следует буква или символ. Ниже приведена таблица специальных символов.
Обозначение | Описание |
---|---|
a | ASCII-символ bell (07) |
d | Дата в формате «День недели Месяц Дата» (например, «Пн Ноя 26») |
D{format} | Значение format передается функции strftime. В строку приглашения подставляется результат выполнения функции. Фигурные скобки обязательны. |
e | ASCII-символ escape (033) |
h | Hostname (имя хоста) до первого символа точка «.». |
H | Hostname (имя хоста, компьютера). |
j | Количество фоновых процессов, запущенных в данной оболочке |
l | Базовое название оболочки. |
n | Переход на новую строку. |
r | Переход к началу строки (возврат каретки). |
s | Имя оболочки (имя shell). |
t | Текущее время в 24-часовом формате (HH:MM:SS). |
T | Текущее время в 12-часовом формате (HH:MM:SS). |
@ | Текущее время в 12-часовом am/pm формате. |
A | Текущее время в 24-часовом формате (HH:MM). |
u | Имя пользователя. |
v | Версия bash (например, 4.4). |
V | Версия bash с версией релиза (например, 4.4.19). |
w | Текущий абсолютный путь (полный путь). Домашняя директория сокращается до значка тильды «~». |
W | Текущий относительный путь. Домашняя директория сокращается до значка тильды «~». |
! | Номер команды в истории команд (history). |
# | Номер команды в текущей сессии терминала. |
$ | Символ приглашения (# для root, $ для обычных пользователей). |
nnn | Символ, соответствующий восьмеричному значению nnn. |
\ | Символ обратной косой черты «». |
[ | Начало последовательности непечатаемых символов. |
] | Конец последовательности. |
Примеры
Пример 1
Приглашение, состоящее из одного символа «>»:
PS1=">"
Пример 2
Текущее время, пользователь, текущая директория:
PS1="A u@w$"
Пример 3
Дата, пользователь, текущая директория, номер команды:
PS1="d:u:w!>"
Как изменить цвета в строке приглашения
Элементы строки приглашения можно раскрашивать в разные цвета.
Чтобы задавать цвета для элементов строки приглашения нужно части строки приглашения заключать в специальные символы.
Используется следующий синтаксис:
e[X;YmРАСКРАШИВАЕМАЯ_СТРОКАe[m
e[ — начало цветовой схемы.
X;Ym — цветовая пара (X;Y). Именно значения X и Y определяют цвет.
e[m — окончание цветовой схемы.
Небольшой пример, чтобы вы понимали о чем идет речь. Раскрасим всю строку целиком цветом с обозначением 0;36.
export PS1="e[0;36mu@h W$ e[m"
Цвета задаются числами. Можно задавать парой X;Y или просто Y. Например, красный это — 0;31 или просто 31. Есть и другие способы задания цветов, но в данной статье мы их не рассматриваем.
Список цифровых обозначений для цветов (Y):
Цвет | Числовое обозначение |
---|---|
Black | 30 |
Red | 31 |
Green | 32 |
Brown | 33 |
Blue | 34 |
Purple | 35 |
Cyan | 36 |
Light gray | 37 |
Dark gray | 90 |
Light red | 91 |
Light green | 92 |
Light yellow | 93 |
Light blue | 94 |
Light magenta | 95 |
Light cyan | 96 |
White | 97 |
При задании цвета двумя числами X;Y, первое число X принимает следующие значения:
0 — обычный цвет;
1 — будет использоваться более яркий цвет;
2 — более темный цвет;
3 — курсив;
4 — подчеркивание;
5 — моргание.
Примеры
Пример 1
Например, установим имя пользователя желтым цветом, а остальной текст оставим стандартным цветом (в моем случае это белый). Для указания желтого цвета используем обозначение 1;33 (как светло-коричневый).
export PS1="e[1:33mue[m@h W$ "
Пример 2
Раскрасим остальные элементы строки приглашения:
export PS1="e[1;33mue[m@e[0;96mhe[m e[0;92mWe[m$ "
Как изменить приглашение на постоянной основе
Новое значение переменной PS1 прописывается в файле .bashrc, который расположен в вашей домашней директории (файл может отсутствовать).
Откроем файл .bashrc в редакторе nano для редактирования. Для этого в терминале выполним команду:
nano ~/.bashrc
Перейдем в конец файла и добавим новую строку, в которой пропишем значение переменной PS1. Например:
PS1="u@w$"
Сохраним изменения и закроем файл. Для этого нажмите Ctrl+X, затем Y и Enter, чтобы сохранить изменения.
Теперь выполним команду source, чтобы наши изменения вступили в силу:
source ~/.bashrc
Перезапустите терминал. Приглашение для ввода команд будет обновлено.
Состояние перевода: На этой странице представлен перевод статьи Bash/Prompt customization. Дата последней синхронизации: 10 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
В Bash существует несколько приглашений командной строки, каждое из которых можно настроить на основе личных представлений об удобстве и эстетичности.
Приглашения
Bash имеет четыре строки приглашения, каждая из которых может быть настроена.
PS1
— основное приглашение, которое отображается перед каждой командой; по этой причине модифицируется чаще всего.PS2
— второе приглашение, отображается, если команде требуются дополнительные данные для ввода (например, в случае многострочных команд).PS3
— используется довольно редко. Отображается при работе встроенной команды Bashselect
, выводящей интерактивное меню. В отличие от остальных приглашений, не раскрывает escape-последовательности Bash. Обычно все изменения применяются непосредственно в скрипте, содержащемselect
, а не в файле.bashrc
.PS4
— также используется редко. При отладке скриптов показывает уровни вложенности — первый символ приглашения повторяется столько раз, сколько на данный момент задействовано уровней.
Настройка конкретного приглашения подразумевает присваивание (обычно в файле ~/.bashrc
) необходимой строки в переменную, например:
PS2='> '
Техники
Приглашение всегда можно задать строкой в явном виде, но существует ряд техник, позволяющих сделать его более динамичным и полезным.
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="${GREEN}my prompt${RESET}> "
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/{print $2}' /proc/meminfo) prompt > "
53718 prompt > 53718 prompt > 53718 prompt >
Как видно, это работает не совсем корректно — значение памяти всегда одно и то же! Причина — команда выполняется только один раз при первой настройке PS1. Необходимо предотвратить подстановку либо экранированием символа $
, либо определением строки в одиночных кавычках — в обоих случаях подстановка будет производиться каждый раз при настоящем отображении приглашения:
PS1="$(awk '/MemFree/{print $2}' /proc/meminfo) prompt > " # или PS1='$(awk "/MemFree/{print $2}" /proc/meminfo) prompt > '
Если команды сделали приглашение слишком длинным, для лучшей читабельности можно вынести их в функцию:
free_mem() { awk '/MemFree/{print $2}' /proc/meminfo } PS1='$(free_mem) prompt > '
Примечание: В подстановочных функциях можно использовать escape-последовательности terminfo/ANSI, но не последовательности Bash. В частности, [ ]
не будет работать при обрамлении ими строки с непечатаемыми символами. Вместо этого используйте восьмеричные экранированные последовательности 01
и 02
(например, в командах 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 {0..255}; do tput setab $C echo -n "$C " done tput sgr0 echo
Если это не работает (причём установлено правильное значение TERM), протестируйте вручную разные последовательности:
# стандартные цвета for C in {40..47}; do echo -en "e[${C}m$C " done # цвета высокой интенсивности for C in {100..107}; do echo -en "e[${C}m$C " done # 256 цветов for C in {16..255}; do echo -en "e[48;5;${C}m$C " done echo -e "e(Be[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(BE[m | отключить все атрибуты текста |
Перемещение курсора | ||
sc | E7 | сохранить позицию курсора |
rc | E8 | вернуть курсор в сохранённую позицию |
clear | E[HE[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
, которые сохраняют и восстанавливают позицию курсора соответственно. Общая схема приглашения, содержащего перемещения курсора:
PS1="[$(tput sc; перемещение курсора) работа с курсором $(tput 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-hackers.org
- Цвета и перемещение курсора с tput
- Приглашение Bash HOWTO
- Коллекция примеров приглашений от Giles Orr
- Советы Bash: цвета и форматирование
- Liquid Prompt — полезное адаптивное приглашение для Bash & zsh
- Bash POWER PROMPT
- Wikipedia:ru:Управляющие последовательности ANSI
- Руководство GNU Bash: управление приглашением
If you are using the Linux operating system, that means you use the CLI most of the time. And do more work on the terminal. By default, most Linux Operating systems provide you the bash shell. Shell provides the interface between the user and kernel and executes commands. In this article, we are going to see how to customize the bash shell prompt
Understanding Default BASH prompt
Before customizing the bash shell prompt first understand the default bash prompt. This default prompt looks like follows:
username@hostname:~$
or
[username@hostaname ~]$
The first part i.e string before @ character of bash prompt indicates the username of the current user. The last part of the bash prompt indicates the hostname of the system. Then the ~ sign indicates the current path of the prompt. If the sign after the : or ] character is $ that means the account is standard or if this character is # then the account is the root
Understanding Different Parts of BASH Prompt
To customize the bash prompt, first, we should understand how the bash prompt works. Bash provides the Prompt Statement. There are four bash prompt statement
- PS1 – This is the primary prompt statement. We will customize this prompt.
- PS2 – This is the secondary prompt statement. Basically, it is used when the user provides the long command separated by characters.
- PS3 – This prompt is used to select the command.
- PS4 – This prompt is used for running a shell script in debug mode.
To see the value of your current PS1 prompt statement, you can use the following command:
echo $PS1
The ps1 has contained the backslash and other alphabetic characters which has a special meaning which is listed in the PROMPTING section of the man page. In the above output, we can see that u h and W are the prompting characters and @ and # are special characters.
To customize the bash prompt, we are going to work on the PS1 prompt and PS2 prompt. Generally, the PS2 prompt contains only one character >. To view the content of the PS2 prompt use the echo command:
echo $PS2
And the $PS3 will be blank and PS4 will contain the + character
Customize Bash Prompt In Linux
The bash prompt can be customized from the ~/.bashrc file. This file contains the prompt Statement. This file is present in the home directory of the user.
~/.bashrc
Before editing this file, make the backup of the ~/.bashrc file. Use the following command to make a backup of the ~/.bashrc file
cp ~/.bashrc ~/.bashrc.bak
Change Bash Prompt in Linux Permanently
To change the bash prompt permanently, we can edit the file ~/.bashrc and change the values of the PS1. To edit this file you can use any editor, but in this tutorial, we are going with nano editor, because it is easy to use. Now to open the ~/.bashrc file, use the following command:
nano ~/.bashrc
Then you will see there is a PS1 variable.
You can edit the value of this variable to change your prompt. For now, let’s change the value of this prompt to bashprompt>. Then save the file using the ctrl+s and then close the file using ctrl+x. Then use the following command to see changes in prompt
source ~/.bashrc
Now we have changes our bash prompt permanently.
Create a Temporary Change to the BASH Prompt
We can change our bash prompt temporarily using the export command, this prompt will work for the current session. To change the temporary bash shell prompt, use the following command:
export PS1="bashprompt>"
Or you can just run to enter the PS1 variable with value as a command:
Modify “username@hostname” part in the Bash prompt
Most of the Linux distributions contain the username@hostname as a bash prompt. We can change it to anything we want. We have to just modify the value of the PS1 variable. In the above two sections, we have seen how to modify the value of the PS1 characters permanently and temporarily. Change the value of PS1 according to your need. So now to change the username@hostname to “myprompt@linux> ” we can set the value of PS1 to
export PS1="myprompt@linux> "
Now let’s see how to add emojis in the bash prompt. To add the emojis to the prompt, first, make sure that you have installed any emoji font on the system. To use the emoji in the prompt, just put the emoji in the PS1 variable. Here is one example:
PS1="???? ~ "
To show the version of bash shell in the prompt, put the v prompting character in the PS1 variable:
PS1="Bash v>"
And to show the current bash version with the patch level, use the V prompting character:
PS1="Bash V>"
Customizing the PS1 Format
To customize the PS1 prompt, we need to edit the content of the PS1 prompt. The PS1 contains some characters followed by the backslash characters. Following are the same characters that are written in the PS1 prompt:
- u: This character indicates the username of the current user.
- h: This character indicates the hostname till the first ‘ . ‘ Character in the Fully-Qualified Domain Name
- W: This character shows the base path of the current working directory. For the home directory, the value will be tilde (~) character.
- $: This character is used to separate the command and prompt. If the account is standard then this field contains $ character, or if the account is root then this field contains the # character.
Now let’s add some other options in PS1 and check how our prompt looks like the ! Character shows the number of the current commands and H character shows the Full Fully-Qualified Domain hostname instead of showing till ‘ . ‘ Character. Here is the prompt now:
PS1="[u@H W !]$"
In the next sections, we are going to explore more prompting options or characters.
Popular Custom Options for BASH Prompts
Now let’s see how can we customize the bash prompt using the options provided by the bash shell for the prompt. Before adding any option to the prompt, use the character before the options.
Display Username and Domain Name
Bash prompt provides two options, by using these we can show hostname and username in prompt.
- To show username in prompt, use u character followed by character.
- To show hostname in prompt, use h character in PS1.
Here is one example:
export PS1="u h >"
Add Special Characters
We can add the special character in the bash prompt. Just arrange them in order how you want to customize the prompt. Here is one example:
export PS1="u@h> "
You should always use the special character at the end of the prompt, which will be useful to separate the command and prompt.
Add Date and Time to The BASH Prompt
Now let’s see how we can add the time to the bash prompt. Following are the options which will be used to display date and time in prompt
- d – This option will show the date in “Weekday Month Date” format
- t – This option will show the current time in 24-hour HH:MM:SS format
- T – This option will show the current time in 12-hour HH:MM:SS format
- A – This option will show the current time in 24-hour HH:MM format
Hide All Information in the BASH Prompt
To prevent the showing username and hostname into prompt just don’t use the h and u characters in the PS1 variable. Just use the W character to display the path of the current directory.
Differentiate Root User From Normal User
The bash prompt is differentiated using the $ and # characters at the end of the prompt. The $ character is used for the standard user and the # character is used for the root user.
export PS1="u@H W:$ "
To know all color options, you read the PROMPTING section of the man page of bash. Using the man command.
tput command
tput is a command that provides the terminal dependent information to the shell .tput command queries the term info database for the information. Now let’s see how we can use the tput command to change the prompt color. Now let’s see how to change the color of the background and foreground of the prompt.
export PS1=”[$(tput setaf 1)][$(tput setab 7)]u@h:w $ [$(tput sgr0)]”
Following are the options that can be used with the tput command:
- tput bold –To apply the bold effect
- tput rev – To display inverse color
- tput sgr0 – To reset everything
- tput setaf {code}– To set the foreground color. See the table below to know the value of {code}
- tput setab {code}– To set background color, See the table below to know value of {code}
Color codes that are used with tput command:
Color {code} | Color |
---|---|
0 | Black |
1 | Red |
2 | Green |
3 | Yellow |
4 | Blue |
5 | Magenta |
6 | Cyan |
7 | White |
How to Change BASH Prompt Color
We can change the color of the bash prompt. Here is one example:
export PS1="e[0;32m[u@h W]$ e[0m"
Now let’s see how we can change the color of the bash prompt:
- e[ – This string tells bash prompt to apply color from next character.
- 0;32m – This string represents the colors. The number before the; represent typeface. And the number after the ; represent color code.
- e[0m – This string will tell the bash prompt to apply the color to the previous character.
Following are the values for the typeface:
- 0 – Normal
- 1 – Bold
- 2 – Dim
- 4 – Underlined
Following are the values for the color codes:
- 30 – Black
- 31 – Red
- 32 – Green
- 33 – Brown
- 34 – Blue
- 35 – Purple
- 36 – Cyan
- 37 – Light gray
You can create the themes using different combinations of the above colors.
How to Reset BASH Changes to Default Settings
If you want the shell back as it is, then we can do that. At the start of this article, we have created the backup file the ~/.bashrc file. Now to get back our original bash prompt, we can use that file. Use the following command:
cat ~/.bashrc.bak > ~/.bashrc
To know more about the bash prompt, read the man page of the bash.
man bash
If you are using the Linux operating system, that means you use the CLI most of the time. And do more work on the terminal. By default, most Linux Operating systems provide you the bash shell. Shell provides the interface between the user and kernel and executes commands. In this article, we are going to see how to customize the bash shell prompt
Understanding Default BASH prompt
Before customizing the bash shell prompt first understand the default bash prompt. This default prompt looks like follows:
username@hostname:~$
or
[username@hostaname ~]$
The first part i.e string before @ character of bash prompt indicates the username of the current user. The last part of the bash prompt indicates the hostname of the system. Then the ~ sign indicates the current path of the prompt. If the sign after the : or ] character is $ that means the account is standard or if this character is # then the account is the root
Understanding Different Parts of BASH Prompt
To customize the bash prompt, first, we should understand how the bash prompt works. Bash provides the Prompt Statement. There are four bash prompt statement
- PS1 – This is the primary prompt statement. We will customize this prompt.
- PS2 – This is the secondary prompt statement. Basically, it is used when the user provides the long command separated by characters.
- PS3 – This prompt is used to select the command.
- PS4 – This prompt is used for running a shell script in debug mode.
To see the value of your current PS1 prompt statement, you can use the following command:
echo $PS1
The ps1 has contained the backslash and other alphabetic characters which has a special meaning which is listed in the PROMPTING section of the man page. In the above output, we can see that u h and W are the prompting characters and @ and # are special characters.
To customize the bash prompt, we are going to work on the PS1 prompt and PS2 prompt. Generally, the PS2 prompt contains only one character >. To view the content of the PS2 prompt use the echo command:
echo $PS2
And the $PS3 will be blank and PS4 will contain the + character
Customize Bash Prompt In Linux
The bash prompt can be customized from the ~/.bashrc file. This file contains the prompt Statement. This file is present in the home directory of the user.
~/.bashrc
Before editing this file, make the backup of the ~/.bashrc file. Use the following command to make a backup of the ~/.bashrc file
cp ~/.bashrc ~/.bashrc.bak
Change Bash Prompt in Linux Permanently
To change the bash prompt permanently, we can edit the file ~/.bashrc and change the values of the PS1. To edit this file you can use any editor, but in this tutorial, we are going with nano editor, because it is easy to use. Now to open the ~/.bashrc file, use the following command:
nano ~/.bashrc
Then you will see there is a PS1 variable.
You can edit the value of this variable to change your prompt. For now, let’s change the value of this prompt to bashprompt>. Then save the file using the ctrl+s and then close the file using ctrl+x. Then use the following command to see changes in prompt
source ~/.bashrc
Now we have changes our bash prompt permanently.
Create a Temporary Change to the BASH Prompt
We can change our bash prompt temporarily using the export command, this prompt will work for the current session. To change the temporary bash shell prompt, use the following command:
export PS1="bashprompt>"
Or you can just run to enter the PS1 variable with value as a command:
Modify “username@hostname” part in the Bash prompt
Most of the Linux distributions contain the username@hostname as a bash prompt. We can change it to anything we want. We have to just modify the value of the PS1 variable. In the above two sections, we have seen how to modify the value of the PS1 characters permanently and temporarily. Change the value of PS1 according to your need. So now to change the username@hostname to “myprompt@linux> ” we can set the value of PS1 to
export PS1="myprompt@linux> "
Now let’s see how to add emojis in the bash prompt. To add the emojis to the prompt, first, make sure that you have installed any emoji font on the system. To use the emoji in the prompt, just put the emoji in the PS1 variable. Here is one example:
PS1="???? ~ "
To show the version of bash shell in the prompt, put the v prompting character in the PS1 variable:
PS1="Bash v>"
And to show the current bash version with the patch level, use the V prompting character:
PS1="Bash V>"
Customizing the PS1 Format
To customize the PS1 prompt, we need to edit the content of the PS1 prompt. The PS1 contains some characters followed by the backslash characters. Following are the same characters that are written in the PS1 prompt:
- u: This character indicates the username of the current user.
- h: This character indicates the hostname till the first ‘ . ‘ Character in the Fully-Qualified Domain Name
- W: This character shows the base path of the current working directory. For the home directory, the value will be tilde (~) character.
- $: This character is used to separate the command and prompt. If the account is standard then this field contains $ character, or if the account is root then this field contains the # character.
Now let’s add some other options in PS1 and check how our prompt looks like the ! Character shows the number of the current commands and H character shows the Full Fully-Qualified Domain hostname instead of showing till ‘ . ‘ Character. Here is the prompt now:
PS1="[u@H W !]$"
In the next sections, we are going to explore more prompting options or characters.
Popular Custom Options for BASH Prompts
Now let’s see how can we customize the bash prompt using the options provided by the bash shell for the prompt. Before adding any option to the prompt, use the character before the options.
Display Username and Domain Name
Bash prompt provides two options, by using these we can show hostname and username in prompt.
- To show username in prompt, use u character followed by character.
- To show hostname in prompt, use h character in PS1.
Here is one example:
export PS1="u h >"
Add Special Characters
We can add the special character in the bash prompt. Just arrange them in order how you want to customize the prompt. Here is one example:
export PS1="u@h> "
You should always use the special character at the end of the prompt, which will be useful to separate the command and prompt.
Add Date and Time to The BASH Prompt
Now let’s see how we can add the time to the bash prompt. Following are the options which will be used to display date and time in prompt
- d – This option will show the date in “Weekday Month Date” format
- t – This option will show the current time in 24-hour HH:MM:SS format
- T – This option will show the current time in 12-hour HH:MM:SS format
- A – This option will show the current time in 24-hour HH:MM format
Hide All Information in the BASH Prompt
To prevent the showing username and hostname into prompt just don’t use the h and u characters in the PS1 variable. Just use the W character to display the path of the current directory.
Differentiate Root User From Normal User
The bash prompt is differentiated using the $ and # characters at the end of the prompt. The $ character is used for the standard user and the # character is used for the root user.
export PS1="u@H W:$ "
To know all color options, you read the PROMPTING section of the man page of bash. Using the man command.
tput command
tput is a command that provides the terminal dependent information to the shell .tput command queries the term info database for the information. Now let’s see how we can use the tput command to change the prompt color. Now let’s see how to change the color of the background and foreground of the prompt.
export PS1=”[$(tput setaf 1)][$(tput setab 7)]u@h:w $ [$(tput sgr0)]”
Following are the options that can be used with the tput command:
- tput bold –To apply the bold effect
- tput rev – To display inverse color
- tput sgr0 – To reset everything
- tput setaf {code}– To set the foreground color. See the table below to know the value of {code}
- tput setab {code}– To set background color, See the table below to know value of {code}
Color codes that are used with tput command:
Color {code} | Color |
---|---|
0 | Black |
1 | Red |
2 | Green |
3 | Yellow |
4 | Blue |
5 | Magenta |
6 | Cyan |
7 | White |
How to Change BASH Prompt Color
We can change the color of the bash prompt. Here is one example:
export PS1="e[0;32m[u@h W]$ e[0m"
Now let’s see how we can change the color of the bash prompt:
- e[ – This string tells bash prompt to apply color from next character.
- 0;32m – This string represents the colors. The number before the; represent typeface. And the number after the ; represent color code.
- e[0m – This string will tell the bash prompt to apply the color to the previous character.
Following are the values for the typeface:
- 0 – Normal
- 1 – Bold
- 2 – Dim
- 4 – Underlined
Following are the values for the color codes:
- 30 – Black
- 31 – Red
- 32 – Green
- 33 – Brown
- 34 – Blue
- 35 – Purple
- 36 – Cyan
- 37 – Light gray
You can create the themes using different combinations of the above colors.
How to Reset BASH Changes to Default Settings
If you want the shell back as it is, then we can do that. At the start of this article, we have created the backup file the ~/.bashrc file. Now to get back our original bash prompt, we can use that file. Use the following command:
cat ~/.bashrc.bak > ~/.bashrc
To know more about the bash prompt, read the man page of the bash.
man bash
Приглашение в командной среде bash изменяется при помощи изменения переменных PS1, PS2, PS3, PS4 и PROMPT_COMMAND.
- PS1 — переменная, которая задает вид строки приглашения командной строки, которое bash выводит, когда ожидает ввода очередной команды пользователем.
- PS2 — переменная, отвечающая за вторичный тип приглашения ввода.
- PS3 — третичное приглашение, выводится тогда, когда пользователь должен сделать выбор в операторе select.
- PS4 — приглашение четвертого уровня, выводится при отладки сценариев (скриптов) в начале каждой строки перед командой перед исполняющейся командой.
- PROMPT_COMMAND — содержимое этой переменной выполняется перед каждой строкой приглашения.
Для того чтобы узнать текущие значения этих переменных можно воспользоваться командой echo.
echo $PS1
Вывод будет примерно следующим:
[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}u@h:w$
Для изменения переменной можно пользоваться командой export. Например:
export PS1='u@w : '
Изменит приглашение на такое:
user@~ :
Другим методом изменения данных переменных является задание из в конце файла ~/.bashrc. Это делается таким образом:
PS1 = "u@w : "
Задание параметров приглашения командной оболочки производится при помощи задания управляющих последовательностей:
- 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)
- [ — Начало последовательности не печатаемых символов (этот символ может быть использован для того, чтобы включить в текст подсказки последовательность управляющих символов терминала)
- ] — Конец последовательности не печатаемых символов
Изменение цвета строки приглашения:
Изменение цвета строки приглашения командной оболочки делается при помощи последовательности
[е[#;##m]
- # — номер свойства цвета
- ## — номер цвета
Номера свойств текста:
Свойство | Код |
Значение по умолчанию | |
Повышенная яркость | 1 |
Пониженная яркость | 2 |
Подчеркнутый | 4 |
Нормальная яркость | 5 |
Инвертированный | 7 |
Скрытый | 8 |
Номера цветов:
Цвет | Текст | Фон |
Черный | 30 | 40 |
Красный | 31 | 41 |
Зеленый | 32 | 42 |
Желтый | 33 | 43 |
Синий | 34 | 44 |
Фиолетовый | 35 | 45 |
Голубой | 36 | 46 |
Белый | 37 | 47 |
Например такая последовательность:
[e[1;37m] u: [e[0;37m]
Настроит строку приглашения следующим образом:
Как видно из примера управляющая последовательность изменяет свойства всего текста после неё и до другой последовательности.
Таким же образом устанавливается цвет фона и текста, но параметры дублированы. Первые два для фона, вторые — для текста:
[е[#;##;#;##m]
Переменная PS2:
Содержимое переменной PS2 появляется на экране терминала при переносе ввода команды на следующую строку. Например:
Метод изменения переменных одинаков, не будем останавливаться на каждой отдельно.
Переменная PS3: Этот вид приглашения используется в скриптах, когда нужно сделать выбор при использовании оператора select.
Переменная PROMPT_COMMAND: Эта переменная используется для помещения какого либо выражения перед каждой строкой приглашения терминала:
Например если поместить в неё команду ls:
export PROMPT_COMMAND='ls'
То перед каждой строкой приглашения выведется список файлов текущей папки:
Для более подробной информации вы можете воспользоваться справочным руководством:
man bash
Введение
Строка приветствия или приглашения (prompt) представляет собой текст, после которого пользователь может вводить команды в терминале Linux. В каждом дистрибутиве Linux строка приветствия имеет свою форму, например в CentOS 7 по умолчанию она выглядит так:
Форма строки приглашения хранится в переменной PS1
.
Увидеть шаблон, по которому строится строка приглашения можно с помощью вывода переменной PS1
.
echo $PS1
[oleg@meliorem ~]# echo $PS1
[u@h W]$
Как видим строка состоит из обычных символов, которые выводятся в терминале как есть и экранированных символов вместо которых подставляются следующие данные:
- u — (user) имя текущего пользователя.
- h — (host) имя текущего хоста.
- W — (working directory) путь к рабочему каталогу (каталог, где сейчас находится пользователь).
- \$ — тип пользователя (# — для root, $ — для обычных пользователей).
Как изменить формат строки приглашения в терминале
Перед тем как изменять строку приглашения рекомендую сохранить ее текущий формат, чтобы в любом случае можно было все вернуть назад.
Сохраним текущий формат строки приветствия в новую переменную — PS1_SAVE
.
PS1_SAVE=$PS1
Чтобы изменить формат строки приглашения, нужно изменить значение переменной — PS1
. Самая простая строка приглашения этот всего лишь один символ с пробелом.
PS1="► "
[oleg@meliorem ~]# PS1="► "
►
Обычный текст не блещет информативностью, поэтому кроме него вам могут пригодиться экранированные символы, их список вы можете видеть ниже.
Простые экранируемые символы
- a — звуковой сигнал (ASCII: 07)
- e — символ escape-последовательности
- « — двойные кавычки
- \ — обратный слэш
- n — новая строка
- r — возврат каретки (курсора) на начало строки
- [— начало последовательности непечатных символов
- ] — конец последовательности непечатных символов
- nnn — восьмеричный код символа (113 -> K)
Вывод даты и времени
- d — дата в формате «день недели месяц число»
- D{формат даты} — дата в указанном формате, например D{%d.%m.%Y}
- @ — время в 12 часовом формате «часы:минуты AMPM»
- A — время в 24 часовом формате «часы:минуты»
- t — время в 24 часовом формате «часы:минуты:секунды»
- T — время в 12 часовом формате «часы:минуты:секунды
Вывод системной информации
- h — имя хоста до первой точки
- H — полное имя хоста
- j — количество работ (jobs), выполняемых в терминале (скрытых после нажатия Ctrl+Z)
- s — имя текущей оболочки (вывод значения переменной — $0)
- u — имя текущего пользователя
- v — версия оболочки BASH
- V — более детальная версия оболочки BASH
- w — полный путь к текущей директории
- W — имя текущей директории
- ! — номер текущей команды в истории команд
- # — номер текущей команды за период сессии
- \$ — тип пользователя (# — для root, $ — для всех остальных)
Рассмотрим пример создания кастомной строки приглашения. Выведем имя пользователя, имя хоста и полный путь для каталога, а с новой строки — тип пользователя.
PS1="u@h:wn$ "
[oleg@meliorem ~]# PS1="u@h:wn\$ "
oleg@meliorem:/var/www
#
Если вы хотите вернуть все назад то просто вставьте значение переменной PS1_SAVE
, в которой мы сохранили изначальный вид строки приглашения.
PS1=$PS1_SAVE
Для того чтобы изменения переменной PS1
были сохранены для последующих сессий в терминале, нужно прописать значение этой переменной в файлах настроек терминала ~/.bashrc
или /etc/bashrc
.
Сохранение нового формата строки приглашения на постоянной основе
При каждом запуске терминала значение переменной PS1
устанавливается в соответствии с тем значением, которое указано в файле /etc/bashrc
. Однако крайне не рекомендуется изменять что-либо в этом файле. Вместо редактирования файла /etc/bashrc
предусмотрен специальный каталог /etc/profile.d
, в котором можно создавать свои файлы *.sh
с необходимым вам функционалом.
Создадим файл /etc/profile.d/custom.sh
для необходимой нам настройки оболочки bash. Данный файл будет автоматически импортирован в /etc/bashrc
, поэтому никаких дополнительных действий не потребуется.
touch /etc/profile.d/custom.sh
Далее уставим нужное нам значение переменной PS1
, я также добавлю немного цвета для строки приветствия.
vi /etc/profile.d/custom.sh
PS1="e[1;38;5;48mu@he[m:e[1;38;5;45mwe[mn\$ "
# Добавим сообщение для авторизованных пользователей
logged_user=$USER # Логин пользователя
echo -e "e[1;38;5;215mЗдравствуйте ${logged_user^}, добро пожаловать на сервер meliorem.ru!e[0m"
Для применения новых настроек в файле /etc/profile.d/custom.sh
необходимо перезапустить терминал. Также для перезапуска можно использовать команду exec.
exec bash
Теперь когда пользователь будет заходить в свою учетную запись в терминале, он увидит следующий результат.
Важно, что все эти настройки будут применены для всех пользователей. Если вы хотите настроить bash только для одного пользователя, то используйте скрытый файл .bashrc
, который находится в домашнем каталоге пользователя. Для применения настроек в ~/.bashrc
необходимо будет перезапустить оболочку — source ~/.bashrc
Вы также можете раскрасить свою строку приветствия, о том как это сделать вы можете почитать здесь.
Настройка вида приглашения командной строки в Bash
Приглашение ко вводу команд в bash — это строка, которая отображается слева от каждой команды, которую вы вводите в терминале. Обычно приглашение имеет вид пользователь@hostname:директория$
Вид приглашения командной строки Bash определяется переменной PS1
. Его можно просмотреть как любую другую переменную окружения:
Как изменить приглашение (только для данной сессии)
Можно установить переменную PS1
только для текущей сессии в терминале. Это удобно, пока вы подбираете, как будет выглядеть строка приглашения. Чтобы это сделать нужно выполнить команду export для переменной PS1
, например:
После выполнения команды строка приглашения в терминале сразу изменится.
Как изменить приглашение на постоянной основе
Новое значение переменной PS1
прописывается в файле .bashrc
, который расположен в вашей домашней директории (файл может отсутствовать).
Откроем файл .bashrc
в редакторе nano
для редактирования. Для этого в терминале выполним команду:
Перейдем в конец файла и добавим новую строку, в которой пропишем значение переменной PS1
. Например:
Сохраним изменения и закроем файл. Для этого нажмите Ctrl+X, затем Y и Enter, чтобы сохранить изменения.
Теперь выполним команду source, чтобы наши изменения вступили в силу:
Перезапустите терминал. Приглашение для ввода команд будет обновлено.
Как изменить цвета в строке приглашения
Элементы строки приглашения можно раскрашивать в разные цвета.
Чтобы задавать цвета для элементов строки приглашения нужно части строки приглашения заключать в специальные символы.
Используется следующий синтаксис:
e[X;YmРАСКРАШИВАЕМАЯ_СТРОКАe[m
e[
— начало цветовой схемы.
X;Ym
— цветовая пара (X;Y). Именно значения X и Y определяют цвет.
e[m
— окончание цветовой схемы.
Небольшой пример, чтобы вы понимали о чем идет речь. Раскрасим всю строку целиком цветом с обозначением 0;36
.
export PS1="e[0;36mu@h W$ e[m"
Цвета задаются числами. Можно задавать парой X;Y или просто Y. Например, красный это — 0;31 или просто 31. Есть и другие способы задания цветов, но в данной статье мы их не рассматриваем.
Список цифровых обозначений для цветов (Y):
Цвет | Числовое обозначение |
---|---|
Black | 30 |
Red | 31 |
Green | 32 |
Brown | 33 |
Blue | 34 |
Purple | 35 |
Cyan | 36 |
Light gray | 37 |
Dark gray | 90 |
Light red | 91 |
Light green | 92 |
Light yellow | 93 |
Light blue | 94 |
Light magenta | 95 |
Light cyan | 96 |
White | 97 |
При задании цвета двумя числами X;Y, первое число X принимает следующие значения:
0 — обычный цвет;
1 — будет использоваться более яркий цвет;
2 — более темный цвет;
3 — курсив;
4 — подчеркивание;
5 — моргание.
Примеры
Простой вывод текущего пользователя и полного пути:
Такойже вывод, но с подстветкой:
PS1="[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}[33[01;32m]u@h[33[00m]:[33[01;34m]w[33[00m]$ "
Список возможных настроек приглашения
Для задания различных значений переменной PS1
существуют специальные символы. Комбинируя различные специальные символы можно составить свою строку приглашения.
Специальные символы начинаются с символа косой черты , за которой следует буква или символ. Ниже приведена таблица специальных символов
Обозначение | Описание |
---|---|
a | ASCII-символ bell (07) |
d | Дата в формате «День недели Месяц Дата» (например, «Пн Ноя 26») |
D{format} | Значение format передается функции strftime. В строку приглашения подставляется результат выполнения функции. Фигурные скобки обязательны. |
e | ASCII-символ escape (033) |
h | Hostname (имя хоста) до первого символа точка . . |
H | Hostname (имя хоста, компьютера). |
j | Количество фоновых процессов, запущенных в данной оболочке |
l | Базовое название оболочки. |
n | Переход на новую строку. |
r | Переход к началу строки (возврат каретки). |
s | Имя оболочки (имя shell). |
t | Текущее время в 24-часовом формате (HH:MM:SS). |
T | Текущее время в 12-часовом формате (HH:MM:SS). |
@ | Текущее время в 12-часовом am/pm формате. |
A | Текущее время в 24-часовом формате (HH:MM). |
u | Имя пользователя. |
v | Версия bash (например, 4.4). |
V | Версия bash с версией релиза (например, 4.4.19). |
w | Текущий абсолютный путь (полный путь). Домашняя директория сокращается до значка тильды ~ . |
W | Текущий относительный путь. Домашняя директория сокращается до значка тильды ~ . |
! | Номер команды в истории команд (history). |
# | Номер команды в текущей сессии терминала. |
$ | Символ приглашения (# для root, $ для обычных пользователей). |
nnn | Символ, соответствующий восьмеричному значению nnn. |
\ | Символ обратной косой черты . |
[ | Начало последовательности непечатаемых символов. |
] | Конец последовательности. |
Introduction
In Linux, much of your work occurs from a command prompt, also known as the shell, or BASH (Bourne-Again Shell). The shell interprets your commands and passes them to the operating system for execution.
This tutorial will show you how to customize or change your Linux BASH prompt.
Prerequisites
- A system running Linux
- Access to a command line/terminal
- A user account with sudo or root privileges
Default BASH Prompt
The default BASH prompt is the one you see when you first open a terminal or command line. It usually looks something like this:
[email protected]:~$
Alternatively, it may look like this:
(base) [[email protected] ~]$
The first part of the prompt tells you the user that’s currently logged in. The second part identifies the hostname of the system.
The tilde sign ~
indicates that the current working directory is the current user’s home directory.
The dollar sign $
means the current user is a standard user.
A root user would be identified with a hash sign #
.
Like most Linux applications, BASH reads a configuration file to determine its behavior. This file is in the home directory:
~/.bashrc
Before you make any changes, create a backup copy of your configuration file. Open a terminal window, and enter the following:
cp ~/.bashrc ~/.bashrc.bak
Note: The system uses the .bak file extension to indicate a backup.
Change Bash Prompt in Linux Permanently
Open the BASH configuration file for editing:
sudo nano ~/.bashrc
In this file, you should see several different settings. Some of them are descriptive lines in blue, uncommented with a #
sign. Some are white, which indicates that they are enabled.
Scroll to the bottom of the configuration file. Add the following line:
PS1="MyTestPrompt> "
You can replace MyTestPrompt>
with any string of text you like.
Save the file (ctrl-o
> Enter) and exit (ctrl-x
).
Refresh the BASH service to apply your changes. Enter the following:
source ~/.bashrc
Your command-line prompt should change to the following:
MyTestPrompt>
Note: Learn everything you need to know about working with Bash comments.
Create a Temporary Change to the BASH Prompt
You can change the BASH prompt temporarily by using the export command. This command changes the prompt until the user logs out.
Set the BASH prompt to only display the username by entering the following:
export PS1="u >"
The prompt should immediately change to look like this:
username >
You can reset the prompt by logging out, then logging back in.
Popular Custom Options for BASH Prompts
You can use these options in either method – temporarily with the export
command, or permanently by editing the ~/.bashrc
file.
Display Username and Domain Name
Use the –H
option to display a a full hostname:
export PS1="uH "
You should see the hostname in the prompt.
Add Special Characters
You can add special characters to the prompt by placing them in order around the special options:
export PS1="[email protected]H :"
This should display the following:
[email protected]:
Note: We recommend ending the prompt with a special character or space. You should also place a space, colon, or angle-bracket just before the final quote mark. This method helps users tell the difference between the prompt and the command they’re typing.
Display Username Plus Shell Name and Version
Enter the following to show username, shell name, and version:
export PS1="u >sv "
The prompt should change to the following:
username >bash4.4
Add Date and Time to The BASH Prompt
Use the following options to display different formats for date and time:
d
– Displays today’s date in [weekday]/[month]/[day]
export PS1="[email protected]H>d "
t
– Displays the current time in 24-hour notation
export PS1="[email protected]H>t "
T
– Displays the current time in 12-hour notation
export PS1="[email protected]H>T "
A
– Displays the current time in 24-hour notation, with just hours and minutes
export PS1="[email protected]H>A "
Note: The [email protected]H options preceding the date and time option add the username and full domain name.
Hide All Information in the BASH Prompt
Use this to prevent usernames or hostnames from displaying at the prompt:
export PS1="W > "
You should see the following:
~ >
Differentiate Root User From Normal User
The normal BASH prompt displays a $
sign for a normal user. If you log in as a root user, a #
sign is displayed. Use the $
code to indicate that the current user is not a root user:
export PS1="[email protected]H W:$ "
More BASH Prompt Options
Here is a list of most of the options you can use for the BASH prompt.
Some of these commands may not work on all versions of Linux.
a
– A bell characterd
– Date (day/month/date)D{format}
– Use this to call the system to respond with the current timee
– Escape characterh
– Hostname (short)H
– Full hostname (domain name)j
– Number of jobs being managed by the shelll
– The basename of the shells terminal devicen
– New liner
– Carriage returns
– The name of the shellt
– Time (hour:minute:second)@
– Time, 12-hour AM/PMA
– Time, 24-hour, without secondsu
– Current usernamev
– BASH versionV
– Extra information about the BASH versionw
– Current working directory ($HOME is represented by ~)W
– The basename of the working directory ($HOME is represented by ~)!
– Lists this command’s number in the history#
– This command’s command number$
– Specifies whether the user is root (#) or otherwise ($)- \– Backslash
[
– Start a sequence of non-displayed characters (useful if you want to add a command or instruction set to the prompt)]
– Close or end a sequence of non-displayed characters
How to Change BASH Prompt Color
You can change the text color of your BASH prompt. For example, to temporarily change the text of your BASH prompt to green, enter the following:
export PS1="e[0;32m[[email protected]h W]$ e[0m"
Your prompt should have the same text as normal but be colored green.
Here’s a breakdown of the commands:
• e[
– Begin color changes
• 0;32m
– Specify the color code
• [[email protected]h W]$
– This is the code for your normal BASH prompt ([email protected] Workingdirectory $
)
• e[0m
– Exit color-change mode
The first number in the color code specifies the typeface:
• 0
– Normal
• 1
– Bold (bright)
• 2
– Dim
• 4
– Underlined
The second number indicates the color you want:
• 30
– Black
• 31
– Red
• 32
– Green
• 33
– Brown
• 34
– Blue
• 35
– Purple
• 36
– Cyan
• 37
– Light gray
Additionally, if you combine the bright option with a color code, you get a lighter version of that color. For example, if you use color code 1;32
, you would get light green instead of the normal green. If you use 1;33
, you get yellow instead of brown.
How to Reset BASH Changes to Default Settings
There are two ways to reset the changes. For temporary changes (using the export PS1=""
command), you can reset the default by logging out.
If you edited the .bashrc
file to make permanent changes, there are two methods to revert to default settings:
- Render your changes as comments by editing the file and adding a
#
before each change you made. - Restore default settings from your backup by entering:
sudo cp ~/.bashrc.bak ~/.bashrc
Understanding Different Parts of BASH Prompt
Before you continue, reset your BASH prompt to the default. If you used the export
command, log out and log back in. If you edited your ~/.bashrc
file, place a #
sign before each edit you made and save the file.
The BASH prompt contains four different values: PS1, PS2, PS3, and PS4.
The PS stands for Prompt Statement. So far, we’ve been working with the PS1 value. To see the current PS1 value, enter the following:
echo $PS1
Depending on the system, the terminal returns something like this for the default settings:
You might recognize the [email protected]h
options as the username and host. The w
option displays the current working directory.
Now, display the PS2 value:
echo $PS2
The system should display just an angle-bracket:
>
Repeating the same command for PS3 should be blank.
For PS4, you’ll see a +
sign.
Here are the different meanings for the different parts of the BASH prompt:
- PS1 – This is the primary prompt display. This is where you set special characters or important information.
- PS2 – This is the secondary prompt string. This is usually set as a divider between the prompt display and the text entry. It is also used to display when a long command is broken into sections with the sign.
- PS3 – This is the prompt for the
select
command. - PS4 – This is the prompt for running a shell script in debug mode.
Under most circumstances, you’ll be working with just the PS1 option and maybe the PS2 option as well.
Conclusion
You should now be able to customize your BASH prompt. You can combine the commands and options to get the look and feel you want.
Every time you start a shell session in Linux, the system goes through configuration files and sets up the environment accordingly. Check out our guide on how to set, view, and unset environment variables in Linux.
Next, Vim users may want to customize Vim and apply custom color schemes.