Изменить цвета «user @ host» терминала терминалов - Gnome [duplicate]

[F1]
97
задан 27 February 2018 в 09:12

6 ответов

Вы можете редактировать настройки, редактируя файл: ~/.bashrc.

Откройте файл: gedit ~/.bashrc. Найдите строку с #force_color_prompt=yes и раскомментируйте (удалите #). Посмотрите на строку ниже if [ "$color_prompt" = yes ]; then, которая должна выглядеть так: PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' Обратите внимание, что в части \u@\h она говорит «user @ host» и номер, перед которым \[\033[01;32m\] указывает цвет. Это то, что вам нужно изменить. Например, позволяет изменить пользователя на фиолетовый, «@» на черный и хост на зеленый. Отредактируйте строку так, чтобы она выглядела так: PS1='${debian_chroot:+($debian_chroot)}\[\033[01;35m\]\u\[\033[01;30m\]@\[\033[01;32m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Результат:

Номера цветов:

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

Ссылки: 1, 2.

115
ответ дан 18 July 2018 в 14:34

Вы можете редактировать настройки, редактируя файл: ~/.bashrc.

Откройте файл: gedit ~/.bashrc. Найдите строку с #force_color_prompt=yes и раскомментируйте (удалите #). Посмотрите на строку ниже if [ "$color_prompt" = yes ]; then, которая должна выглядеть так: PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' Обратите внимание, что в части \u@\h она говорит «user @ host» и номер, перед которым \[\033[01;32m\] указывает цвет. Это то, что вам нужно изменить. Например, позволяет изменить пользователя на фиолетовый, «@» на черный и хост на зеленый. Отредактируйте строку так, чтобы она выглядела так: PS1='${debian_chroot:+($debian_chroot)}\[\033[01;35m\]\u\[\033[01;30m\]@\[\033[01;32m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Результат:

Номера цветов:

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

Ссылки: 1, 2.

115
ответ дан 24 July 2018 в 20:25

Подробнее см. в этом подробном HOWTO.

Короче говоря, вы можете изменить приглашение, отредактировав переменную среды $ PS1. Здесь есть что сказать, что я просто покажу вам свое приглашение и перейду к ссылке выше для более подробной информации.

Части, связанные с цветом, находятся в функции setPrompt:

# This function from: https://wiki.archlinux.org/index.php/Color_Bash_Prompt_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29#Wolfman.27s ################################################## # Fancy PWD display function ################################################## # The home directory (HOME) is replaced with a ~ # The last pwdmaxlen characters of the PWD are displayed # Leading partial directory names are striped off # /home/me/stuff -> ~/stuff if USER=me # /usr/share/big_dir_name -> ../share/big_dir_name if pwdmaxlen=20 ################################################## bash_prompt_shortener() { # How many characters of the $PWD should be kept local pwdmaxlen=25 # Indicate that there has been dir truncation local trunc_symbol=".." local dir=${PWD##*/} pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen )) NEW_PWD=${PWD/#$HOME/\~} local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen )) if [ ${pwdoffset} -gt "0" ] then NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen} NEW_PWD=${trunc_symbol}/${NEW_PWD#*/} fi } function setPrompt { COLOR1="\[\033[1;33m\]" #First color COLOR2="\[\033[0;33m\]" #Second color NO_COLOR="\[\033[0m\]" #Transparent - don't change case $TERM in xterm*) TITLEBAR="\[\033]0;\h - \w\007\]" ;; *) TITLEBAR="" ;; esac local dash_open="${COLOR1}-${COLOR2}-" local dash_close="${COLOR2}-${COLOR1}-" local spacer="${COLOR2}-" local jobs_and_history="${COLOR2}(${COLOR1}\!${COLOR2}:${COLOR1}\j${COLOR2})" local user_host="${COLOR2}(${COLOR1}\u${COLOR2}@${COLOR1}\H${COLOR2})" local host="${COLOR2}(${COLOR1}\H${COLOR2})" local root_or_not="${COLOR2}(${COLOR1}\\\$${COLOR2})" local cwd="${COLOR2}(${COLOR1}\w${COLOR2})" #PS1="${TITLEBAR}${COLOR1}-${COLOR2}-(${COLOR1}\!${COLOR2}:${COLOR1}\j${COLOR2})-(${COLOR1}\w${COLOR2})-${COLOR1}-\n-${COLOR2}-(${COLOR1}\u${COLOR2}@${COLOR1}\H${COLOR2})-(${COLOR1}\\\$${COLOR2})-${COLOR1}- ${NO_COLOR}" #PS1="${TITLEBAR}${dash_open}${cwd}${spacer}${root_or_not}${dash_close}\n${dash_open}${jobs_and_history}${spacer}${host}${dash_close}${NO_COLOR} " #PS2="${COLOR2}--${COLOR1}- ${NO_COLOR}" PS1="${TITLEBAR}${COLOR1}"'${NEW_PWD}'"${COLOR2}:\$${NO_COLOR} " PS2="$spacer$dash_close$NO_COLOR " } bash_prompt_shortener setPrompt unset setPrompt #Determine and display the exit Status of the last command, if non-zero. function checkExitStatus() { local status="$?" local signal="" local COLOR1="\033[0;0;33m" #First color local COLOR2="\033[0;0;36m" #Second color local NO_COLOR="\033[0m" #Transparent - don't change if [ ${status} -ne 0 -a ${status} != 128 ]; then # If process exited by a signal, determine name of signal. if [ ${status} -gt 128 ]; then signal="$(builtin kill -l $((${status} - 128)) 2>/dev/null)" if [ "$signal" ]; then signal="$signal" fi fi echo -e "${COLOR1}[Exit ${COLOR2}${status} ${signal}${COLOR1}]${NO_COLOR}" 1>&2 #echo -ne "${COLOR1}[Exit ${COLOR2}${status}${COLOR1} ${COLOR2}${signal}${COLOR1}]${NO_COLOR} " 1>&2 fi return 0 } print_prompt_time() { printf "%*s\r" $(tput cols) "$(date '+%T')" } promptCmd() { checkExitStatus print_prompt_time } PROMPT_COMMAND=promptCmd

В дополнение к цветам в моей подсказке есть несколько других функций, таких как сокращенные имена каталогов (см. функцию bash_prompt_shortener), автоматическое отображение статуса выхода последней команды, если отличное от нуля (функция checkExitStatus), , и отображение времени в крайних правых столбцах (функция print_prompt_time).

6
ответ дан 18 July 2018 в 14:34

Вы можете попробовать BashrcGenerator. Это самый простой способ получить подсказку, как вы хотите. Я заметил, что цвета, определенные здесь, могут отличаться от вашей собственной системы, но это небольшая проблема. Сгенерированный код вы можете сами изменить цвета.

Пользователь сервера:

export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W]\\$ \[\e[0m\]"

Сервер сервера:

export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;31m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W]\\$ \[\e[0m\]"

И при необходимости вы можете изменить цвет имени хоста, чтобы отображать разные типы серверов.

Я использую другой формат для своего локального компьютера:

export PS1="\[\e[01;33m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;36m\]\h\[\e[0m\]\[\e[00;37m\] \t \[\e[0m\]\[\e[01;35m\]\w\[\e[0m\]\[\e[01;37m\] > \[\e[0m\]"

Мой любимый сейчас:

export PS1="\n\[\e[01;33m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;36m\]\h\[\e[0m\]\[\e[00;37m\] \t \[\e[0m\]\[\e[01;35m\]\w\[\e[0m\]\[\e[01;37m\] \[\e[0m\]\n$ "

В этом последнем приглашении есть одно приятное прикосновение. Он добавляет новую строку после приглашения и пустую новую строку раньше. Теперь вы можете отобразить полный путь к каталогу без проблем, и это делает его более понятным, когда начинается новая команда, в случае длительного вывода.

28
ответ дан 18 July 2018 в 14:34

Подробнее см. в этом подробном HOWTO.

Короче говоря, вы можете изменить приглашение, отредактировав переменную среды $ PS1. Здесь есть что сказать, что я просто покажу вам свое приглашение и перейду к ссылке выше для более подробной информации.

Части, связанные с цветом, находятся в функции setPrompt:

# This function from: https://wiki.archlinux.org/index.php/Color_Bash_Prompt_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29#Wolfman.27s ################################################## # Fancy PWD display function ################################################## # The home directory (HOME) is replaced with a ~ # The last pwdmaxlen characters of the PWD are displayed # Leading partial directory names are striped off # /home/me/stuff -> ~/stuff if USER=me # /usr/share/big_dir_name -> ../share/big_dir_name if pwdmaxlen=20 ################################################## bash_prompt_shortener() { # How many characters of the $PWD should be kept local pwdmaxlen=25 # Indicate that there has been dir truncation local trunc_symbol=".." local dir=${PWD##*/} pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen )) NEW_PWD=${PWD/#$HOME/\~} local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen )) if [ ${pwdoffset} -gt "0" ] then NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen} NEW_PWD=${trunc_symbol}/${NEW_PWD#*/} fi } function setPrompt { COLOR1="\[\033[1;33m\]" #First color COLOR2="\[\033[0;33m\]" #Second color NO_COLOR="\[\033[0m\]" #Transparent - don't change case $TERM in xterm*) TITLEBAR="\[\033]0;\h - \w\007\]" ;; *) TITLEBAR="" ;; esac local dash_open="${COLOR1}-${COLOR2}-" local dash_close="${COLOR2}-${COLOR1}-" local spacer="${COLOR2}-" local jobs_and_history="${COLOR2}(${COLOR1}\!${COLOR2}:${COLOR1}\j${COLOR2})" local user_host="${COLOR2}(${COLOR1}\u${COLOR2}@${COLOR1}\H${COLOR2})" local host="${COLOR2}(${COLOR1}\H${COLOR2})" local root_or_not="${COLOR2}(${COLOR1}\\\$${COLOR2})" local cwd="${COLOR2}(${COLOR1}\w${COLOR2})" #PS1="${TITLEBAR}${COLOR1}-${COLOR2}-(${COLOR1}\!${COLOR2}:${COLOR1}\j${COLOR2})-(${COLOR1}\w${COLOR2})-${COLOR1}-\n-${COLOR2}-(${COLOR1}\u${COLOR2}@${COLOR1}\H${COLOR2})-(${COLOR1}\\\$${COLOR2})-${COLOR1}- ${NO_COLOR}" #PS1="${TITLEBAR}${dash_open}${cwd}${spacer}${root_or_not}${dash_close}\n${dash_open}${jobs_and_history}${spacer}${host}${dash_close}${NO_COLOR} " #PS2="${COLOR2}--${COLOR1}- ${NO_COLOR}" PS1="${TITLEBAR}${COLOR1}"'${NEW_PWD}'"${COLOR2}:\$${NO_COLOR} " PS2="$spacer$dash_close$NO_COLOR " } bash_prompt_shortener setPrompt unset setPrompt #Determine and display the exit Status of the last command, if non-zero. function checkExitStatus() { local status="$?" local signal="" local COLOR1="\033[0;0;33m" #First color local COLOR2="\033[0;0;36m" #Second color local NO_COLOR="\033[0m" #Transparent - don't change if [ ${status} -ne 0 -a ${status} != 128 ]; then # If process exited by a signal, determine name of signal. if [ ${status} -gt 128 ]; then signal="$(builtin kill -l $((${status} - 128)) 2>/dev/null)" if [ "$signal" ]; then signal="$signal" fi fi echo -e "${COLOR1}[Exit ${COLOR2}${status} ${signal}${COLOR1}]${NO_COLOR}" 1>&2 #echo -ne "${COLOR1}[Exit ${COLOR2}${status}${COLOR1} ${COLOR2}${signal}${COLOR1}]${NO_COLOR} " 1>&2 fi return 0 } print_prompt_time() { printf "%*s\r" $(tput cols) "$(date '+%T')" } promptCmd() { checkExitStatus print_prompt_time } PROMPT_COMMAND=promptCmd

В дополнение к цветам в моей подсказке есть несколько других функций, таких как сокращенные имена каталогов (см. функцию bash_prompt_shortener), автоматическое отображение статуса выхода последней команды, если отличное от нуля (функция checkExitStatus), , и отображение времени в крайних правых столбцах (функция print_prompt_time).

6
ответ дан 24 July 2018 в 20:25
  • 1
    Спасибо, что поделились вашими пользовательскими функциями :) Является ли это только тем, что временная метка исчезает, когда я нажимаю кнопку backspace? – Luiz Rodrigo 20 April 2012 в 05:14
  • 2
    Неа. Я тоже. Есть какая-то ошибка, которую я не счел достаточно важным, чтобы попытаться исправить. – Scott Severance 20 April 2012 в 06:04

Вы можете попробовать BashrcGenerator. Это самый простой способ получить подсказку, как вы хотите. Я заметил, что цвета, определенные здесь, могут отличаться от вашей собственной системы, но это небольшая проблема. Сгенерированный код вы можете сами изменить цвета.

Пользователь сервера:

export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W]\\$ \[\e[0m\]"

Сервер сервера:

export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;31m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W]\\$ \[\e[0m\]"

И при необходимости вы можете изменить цвет имени хоста, чтобы отображать разные типы серверов.

Я использую другой формат для своего локального компьютера:

export PS1="\[\e[01;33m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;36m\]\h\[\e[0m\]\[\e[00;37m\] \t \[\e[0m\]\[\e[01;35m\]\w\[\e[0m\]\[\e[01;37m\] > \[\e[0m\]"

Мой любимый сейчас:

export PS1="\n\[\e[01;33m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;36m\]\h\[\e[0m\]\[\e[00;37m\] \t \[\e[0m\]\[\e[01;35m\]\w\[\e[0m\]\[\e[01;37m\] \[\e[0m\]\n$ "

В этом последнем приглашении есть одно приятное прикосновение. Он добавляет новую строку после приглашения и пустую новую строку раньше. Теперь вы можете отобразить полный путь к каталогу без проблем, и это делает его более понятным, когда начинается новая команда, в случае длительного вывода.

28
ответ дан 24 July 2018 в 20:25
  • 1
    Генератор PS1: +1: D – anishsane 1 June 2015 в 08:17
  • 2
    действительно очень понравился последний, я волновался, потому что имя пользователя и путь заняли у меня много места, с последним вариантом вы можете получить весь экран – Damian Lattenero 24 July 2017 в 16:16
  • 3
    Это здорово! однако, как я могу это сделать для конкретных хостов? то есть установить конкретную цветовую схему, когда я ssh на производственный сервер, например? я должен сделать это и «вручную». с блоками if-fi в .bashrc? или есть более элегантный способ? – Acapulco 5 April 2018 в 00:39

Другие вопросы по тегам:

Похожие вопросы: