Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > Как изменить строку приглашения (bash prompt) в терминале?


Автор: Chuck 31.5.2005, 19:07
За вид строки приглашения отвечают переменные окружения PS1 и PROMPT_COMMAND.
Собственно, сам вид строки определяется в переменной PS1, а содержимое переменной PROMPT_COMMAND вычисляется каджый раз при выводе приглашения.
Простая строка приглашения может выглядеть так:
Код

shmel@nirvana:


При этом переменная PS1 выглядит так:
Код

PS1="\u@\h: "

Экранированные символы u и h при генерации значения PS1 будут заменены на имя текущего пользователя и имя машины соотвественно. Таких экранированных спецсимволов около двух десятков, подробности - в man bash.
Попробуем сделать следующее:
Код

PROMPT_COMMAND="date +%H:%M:%S"
PS1="\u@\h: "

Теперь у нас над строкой приглашения болтаются часики.
С помощью специальных непечатаемых escape-последовательностей можно изменять цвет символов и их фона. Такие последовательности должны быть заключены в \[\033[ и \], а после кода цвета должна стоять буква "m"
Коды у цветов такие:
Код

Black        0;30
Blue         0;34
Green        0;32
Cyan         0;36
Red          0;31
Purple       0;35
Brown        0;33
Light Gray   0;37
Dark Gray    1;30
Light Blue   1;34
Light Green  1;32
Light Cyan   1;36
Light Red    1;31
Light Purple 1;35
Yellow       1;33
White        1;37
NoColor      0


Покрасим нашу строку приглашения в зеленый цвет:
Код

PROMPT_COMMAND="date +%H:%M:%S"
PS1="\[\033[0;32m\]\u@\h: \[\033[0m\]"


Короче говоря, вид bash prompt целиком и полностью зависит от вашей фантазии.
Я пользуюсь таким bash prompt:

Код

ps_gen() {
    local DARK_GRAY="\[\033[1;30m\]"
    local RED="\[\033[0;31m\]"
    local NO_COLOR="\[\033[0m\]"
    
    local WD=$DARK_GRAY'[\w]'$NO_COLOR
    local USERNAME="\$(\
    if [ \$(whoami) != 'root' ]; \
    then echo -n '"$NO_COLOR"\u"$NO_COLOR"';\
    else echo -n '"$RED"\u"$NO_COLOR"';fi)"
    local MACHINE='\h'
    
    local PROMPT=$WD'\n['$USERNAME'@'$MACHINE']: '
    echo -n $PROMPT
}

Здесь всё просто: над строкой приглашения пишется текущий каталог, а внизу - имя пользователя и машины, причем если я - рут, то имя пользователя выделяется красным цветом.

Обычный пользователь:
Код

[~/docs]
[shmel@nirvana]:

А вот так под рутом:
Код

[~/docs]
[root@nirvana]:


Обязательно к прочтению:
http://www.opennet.ru/man.shtml?topic=bash&category=1&russian=0
http://www.gilesorr.com/bashprompt/howto/book1.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)