ТЕРМИНАЛ ПОД "ХОХЛОМУ" В UBUNTU

Чтобы поменять цвета приглашения bash нашего терминала, надо открыть один файлик...

Для начала нам нужно узнать какие носители подключены к компьютеру. Набираем в консоли команду

gedit ~/.bashrc & exit

Откроется редактор "Gedit" и там будет нечто вроде

{slider=этого:}

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi

if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'

alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
PS1="\[\033[1;33;1;36m\]\u@\h:\[\033[1;31m\]\w$ \[\033[0m\]\[\033[0m\]"

{/sliders}

Вот тут в самом низу есть строчка.

PS1="\[\033[1;33;1;36m\]\u@\h:\[\033[1;31m\]\w$ \[\033[0m\]\[\033[0m\]"

Если ее нет, то можно добавить. А теперь разберемся что это такое и счем это едят.

Сначала немного теории.

Вид приглашения командной строки Bash определяется переменной PS1. Его можно просмотреть как любую другую переменную окружения:

\u - специальный символ, означающий логин пользователя (здесь - denister)
\h - специальный символ, означающий имя компьютера (хоста) (calculate)
\w - специальный символ, означающий рабочую директорию. (Как известно, тильда (~) обозначает домашнюю директорию).
Символы @, $ означают сами себя.

А теперь посмотрим значение PS1 по-умолчанию в CLD 11.0 (у меня)
(Я рассматриваю вариант обычного пользователя, не рута.)

Как видим, тут уже присутствует цвет.

Так каким же образом происходит задание цвета символов и фона, а также переключение различных режимов отображения терминала в UNIX (и во множестве других ОС)? Да также, как и в легендарные времена телетайпных терминалов — посылкой на устройство отображения управляющих команд в виде esc-последовательностей (esc сокр. от англ. escape, произносится как эскейп).
Такая последовательность состоит из двух или более символов, первый из которых будет esc (десятичный код равен 27, восьмеричный — 033, шестнадцатеричный — 0x1B). Раскрашивание производится внесением определенных изменений в структуру переменной PS1.
Чтобы расцветить некую часть приглашения, нужно непосредственно перед этой частью подставить выражение \[\033[Хm\]. В случае желтого цвета вместо Х подставляем 33;1. Если подставить просто 33, то получится кирпичный цвет; если 33;4 то кирпичный подчеркнутый; если 33;5 то кирпичный символ станет мигать; если 33,7 то будет черный символ в кирпичном квадратике.
К слову сказать, безразлично в каком порядке ставить значения вокруг точки с запятой, так 33;1 эквивалентно 1;33.

Вот таблица основных цветов

Черный            30
Темно-красный     31 
Зеленый           32
Кирпичный         33
Синий             34
Фиолетовый        35
Бирюзовый         36
Серый             37
Ярко-красный      38

Добавление к номеру цвета через точку с запятой единицы дает более светлый оттенок:

31;1     Розовый
33;1     Желтый  и т. д.

Добавление к номеру цвета через точку с запятой четверки дает подчеркивание.
Добавление к номеру цвета через точку с запятой пятерки дает мигающий символ.
Добавление к номеру цвета через точку с запятой семерки дает черный символ на фоне соответствующего цвета.
Если вместо номеров 30-38 подставить номера 40-48, то окрашиваться в те же самые цвета будут не символы, а фон вокруг них:

Можно также составлять более сложные комбинации цветов фона и шрифта, например
\[\033[01;32;42m\].

Внимательно просмотрев все вышеприведенные команды, следует обратить внимание, что все они заканчиваются одним и тем же выражением \[\033[00m\]. Дело в том, что данное выражение равнозначно выражению \[\033[m\], что задает "никакой" цвет, то есть тот цвет, что был первоначально. Это необходимо, чтобы весь дальнейший текст (вводимые команды, параметры, вывод команд) производился обычным цветом консольного текста, а не окрашивался в новые цвета.

Изменить PS1 можно прямо из командной строки, набрав например

denister@calculate ~ $ PS1="\[\033[01;42m\]\u\[\033[00m\]@\h\[\033[01;32m\] \w $\[\033[00m\]" 

но тогда при выходе из консоли все цвета пропадут.
Для того, чтобы сделать разноцветное приглашение постоянным, нужно создать в домашнем каталоге файл .bashrc и вписать в него значение PS1 также как вводили в терминале:

#Цвета приглашения командной строки:
PS1="\[\033[01;42m\]\u\[\033[00m\]@\h\[\033[01;32m\] \w $\[\033[00m\]" 

Хочу заметить, что если вы смените пользователя, например на рута, то все цвета опять изменятся по-умолчанию. Чтобы раскрасить приглашение BASH другого пользователя, нужно создать такой же файлик .bashrc в домашней директории этого пользователя, например /root/.bashrc и вписать в него значение PS1.
Можно поменять PS1 глобально в /etc/bash/bashrc, но я этого делать не советую.

Ну а теперь самое интересное!

#Использование различных цветов:

PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ " 

\t — выводит время
\d - дату

#Показываем полный путь:

PS1="\[\033[32m\][\w]\[\033[0m\]\n\[\033[1;36m\]\u\[\033[1;33m\]-> \[\033[0m\]" 

В этом простом и понятном примере выдаются две строки с данными. В первой строке в удобном формате изображается полный путь, а во второй - только имя пользователя.
\n — перенос строки

#Изменение цвета в случае неверного ввода команды

PS1="\[\033[0;33m\][\!]\`if [[ \$? = "0" ]]; then echo "\\[\\033[32m\\]"; else echo "\\[\\033[31m\\]"; fi\`[\u.\h: \`if [[ `pwd|wc -c|tr -d " "` > 18 ]]; then echo "\\W"; else echo "\\w"; fi\`]\$\[\033[0m\] "; echo -ne "\033]0;`hostname -s`:`pwd`\007" 

Это обычная командная строка. Цвет выдаваемого сообщения изменится в случае, если возникнут проблемы с выполнением последней команды. Одновременно выдается путь к текущему директорию и для удобства поиска для каждой команды указывается ее номер в списке истории команд bash.

#Выдаем веселую рожицу в случае, если исполнение команды завершилось успешно

PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\\$ " 

Идея состоит в том, что если ваша команда будет выполнена успешно, то будет выдаваться веселая рожица. А если команда завершится неудачно — будет выдана печальная рожица.

Ну и если кто еще найдет интересные решения - выкладывайте.

И конечно - man bash раздел PROMPTING

 

Ссылка на источник

Добавить комментарий


Защитный код
Обновить