Поиск…


Изменить приглашение 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

введите описание изображения здесь



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow