Bash
Настройка PS1
Поиск…
Изменить приглашение PS1
Чтобы изменить PS1, вам просто нужно изменить значение переменной оболочки PS1. Значение может быть установлено в файле ~/.bashrc
или /etc/bashrc
, в зависимости от дистрибутива. PS1 можно изменить на любой простой текст, например:
PS1="hello "
Помимо обычного текста поддерживается несколько специальных символов с обратным слэшем:
Формат | действие |
---|---|
\a | символ колокола ASCII (07) |
\d | дата в формате «День недели месяца» (например, «Вт май 26») |
\D{format} | формат передается в strftime (3), и результат вставляется в строку приглашения; пустой формат приводит к представлению времени, специфичному для локали. Требуются скобки |
\e | ASCII escape-символ (033) |
\h | имя хоста до первого '.' |
\H | имя хоста |
\j | количество рабочих мест, которыми в настоящее время управляет оболочка |
\l | базовое имя имени терминального устройства оболочки |
\n | новая линия |
\r | возврат каретки |
\s | имя оболочки, базовое имя $ 0 (часть, следующая за последней косой чертой) |
\t | текущее время в 24-часовом формате HH: MM: SS |
\T | текущее время в 12-часовом формате HH: MM: SS |
\@ | текущее время в 12-часовом формате am / pm |
\A | текущее время в 24-часовом формате HH: MM |
\u | имя пользователя текущего пользователя |
\v | версия bash (например, 2.00) |
\V | выпуск bash, версия + уровень патча (например, 2.00.0) |
\w | текущий рабочий каталог, с $ HOME сокращенно с тильдой |
\W | basename текущего рабочего каталога, с $ HOME сокращенно с тильдой |
\! | номер истории этой команды |
\# | номер команды этой команды |
\$ | если эффективный UID равен 0, a #, в противном случае $ |
\nnn* | символ, соответствующий восьмеричному числу nnn |
\ | обратная косая черта |
\[ | начните последовательность непечатаемых символов, которые могут быть использованы для встраивания управляющей последовательности терминала в приглашение |
\] | завершение последовательности непечатаемых символов |
Так, например, мы можем установить PS1 в:
PS1="\u@\h:\w\$ "
И он будет выводить:
пользователь @ машина: ~ $
Показать ветку git с помощью PROMPT_COMMAND
Если вы находитесь в папке git-репозитория, может быть приятно показать текущую ветку, в которой вы находитесь. В ~/.bashrc
или /etc/bashrc
добавьте следующее (для этого требуется git):
function prompt_command {
# Check if we are inside a git repository
if git status > /dev/null 2>&1; then
# Only get the name of the branch
export GIT_STATUS=$(git status | grep 'On branch' | cut -b 10-)
else
export GIT_STATUS=""
fi
}
# This function gets called every time PS1 is shown
PROMPT_COMMAND=prompt_command
PS1="\$GIT_STATUS \u@\h:\w\$ "
Если мы находимся в папке внутри репозитория git, это будет выводить:
branch user @ machine: ~ $
И если мы находимся внутри обычной папки:
пользователь @ машина: ~ $
Показать имя ветки git в приглашении терминала
У вас могут быть функции в переменной PS1, просто убедитесь, что она одинарная, или используйте escape для специальных символов:
gitPS1(){
gitps1=$(git branch 2>/dev/null | grep '*')
gitps1="${gitps1:+ (${gitps1/#\* /})}"
echo "$gitps1"
}
PS1='\u@\h:\w$(gitPS1)$ '
Он даст вам следующее:
user@Host:/path (master)$
Заметки:
- Внесите изменения в файлы
~/.bashrc
или/etc/bashrc
или~/.bash_profile
или~./profile
(в зависимости от ОС) и сохраните их. - Запустите
source ~/.bashrc
(distro specific) после сохранения файла.
Показывать время в командной строке терминала
timeNow(){
echo "$(date +%r)"
}
PS1='[$(timeNow)] \u@\h:\w$ '
Он даст вам следующее:
[05:34:37 PM] user@Host:/path$
Заметки:
- Внесите изменения в файлы
~/.bashrc
или/etc/bashrc
или~/.bash_profile
или~./profile
(в зависимости от ОС) и сохраните их. - Запустите
source ~/.bashrc
(distro specific) после сохранения файла.
Раскрасить и настроить подсказку терминала
Так автор устанавливает свою личную переменную PS1
:
gitPS1(){
gitps1=$(git branch 2>/dev/null | grep '*')
gitps1="${gitps1:+ (${gitps1/#\* /})}"
echo "$gitps1"
}
#Please use the below function if you are a mac user
gitPS1ForMac(){
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
timeNow(){
echo "$(date +%r)"
}
if [ "$color_prompt" = yes ]; then
if [ x$EUID = x0 ]; then
PS1='\[\033[1;38m\][$(timeNow)]\[\033[00m\] \[\033[1;31m\]\u\[\033[00m\]\[\033[1;37m\]@\[\033[00m\]\[\033[1;33m\]\h\[\033[00m\] \[\033[1;34m\]\w\[\033[00m\]\[\033[1;36m\]$(gitPS1)\[\033[00m\] \[\033[1;31m\]:/#\[\033[00m\] '
else
PS1='\[\033[1;38m\][$(timeNow)]\[\033[00m\] \[\033[1;32m\]\u\[\033[00m\]\[\033[1;37m\]@\[\033[00m\]\[\033[1;33m\]\h\[\033[00m\] \[\033[1;34m\]\w\[\033[00m\]\[\033[1;36m\]$(gitPS1)\[\033[00m\] \[\033[1;32m\]:/$\[\033[00m\] '
fi
else
PS1='[$(timeNow)] \u@\h \w$(gitPS1) :/$ '
fi
И вот как выглядит мое приглашение:
Ссылка цвета:
# Colors
txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m' # Black - Background
bakred='\e[41m' # Red
badgrn='\e[42m' # Green
bakylw='\e[43m' # Yellow
bakblu='\e[44m' # Blue
bakpur='\e[45m' # Purple
bakcyn='\e[46m' # Cyan
bakwht='\e[47m' # White
txtrst='\e[0m' # Text Reset
Заметки:
Внесите изменения в файлы
~/.bashrc
или/etc/bashrc
или~/.bash_profile
или~./profile
(в зависимости от ОС) и сохраните их.Для
root
вам также может потребоваться отредактировать файл/etc/bash.bashrc
или/root/.bashrc
Запустите
source ~/.bashrc
(distro specific) после сохранения файла.Примечание: если вы сохранили изменения в
~/.bashrc
, не забудьте добавитьsource ~/.bashrc
в свой файл~/.bash_profile
чтобы это изменение вPS1
записывалось каждый раз, когда запускается приложение терминала.
Показать предыдущий статус и время возврата команды
Иногда нам нужен визуальный намек, указывающий статус возврата предыдущей команды. Следующий фрагмент делает его во главе PS1.
Обратите внимание, что функцию __stat () следует вызывать каждый раз, когда генерируется новый PS1, иначе он будет придерживаться статуса возврата последней команды вашего .bashrc или .bash_profile.
# -ANSI-COLOR-CODES- #
Color_Off="\033[0m"
###-Regular-###
Red="\033[0;31m"
Green="\033[0;32m"
Yellow="\033[0;33m"
####-Bold-####
function __stat() {
if [ $? -eq 0 ]; then
echo -en "$Green ✔ $Color_Off "
else
echo -en "$Red ✘ $Color_Off "
fi
}
PS1='$(__stat)'
PS1+="[\t] "
PS1+="\e[0;33m\u@\h\e[0m:\e[1;34m\w\e[0m \n$ "
export PS1