Как заставить терминал отображать user @ machine жирным шрифтом?

31

Я видел на некоторых снимках экрана (не помню, где в сети), что терминал может отображать [username@machine /]$жирным шрифтом. Я тоже с нетерпением жду этого, потому что всегда прокручиваю длинные результаты, чтобы с трудом найти первую строку после моей команды.

Как я могу сделать имя пользователя и т. Д. Жирным или цветным?

Вениамин
источник
Можете ли вы уточнить, используете ли вы оболочку bash или другую оболочку?
Стивен Куан
Гном Терминал Баш.
Бенджамин

Ответы:

22

Вы должны быть в состоянии сделать это, установив PS1переменную подсказки в вашем ~/.bashrcфайле следующим образом:

PS1='[\u@\h \w]\$ '

Чтобы сделать его цветным (и, возможно, жирным - это зависит от того, активировал ли его эмулятор терминала), вам нужно добавить escape-коды цвета:

PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '

Здесь все, что не может быть разделено между 1;91mи 0mчастями, будет окрашено в 1;91цвет (жирный красный). Поместите эти escape-коды вокруг разных частей приглашения, чтобы использовать разные цвета, но не забудьте сбросить цвета с помощью, 0mиначе у вас также будет цветной вывод терминала. Не забудьте затем загрузить исходный файл для обновления текущей оболочки:source ~/.bashrc


источник
Почему бы не использовать 31 для красного? 91 не кажется стандартным кодом.
jw013
1
@ jw013 Диапазон 90-97 эквивалентен диапазону 30-37, если он выделен жирным шрифтом, т . е. 1;31и 1;91. Используя нормальный вес шрифта, диапазон 90-97 дает более яркие цвета, чем другие.
45

Найдите, где PS1находится ваш .bashrcи вставьте '\[\e[1m\]'в начале и \[\e[0m\]в конце.

  • \[и \]необходимы, чтобы оболочка знала, что беспорядок внутри занимает 0 места на экране, что предотвращает некоторые проблемы при редактировании строки. Вам не нужно слишком беспокоиться об этом.
  • \e[известен как CSI (регулятор последовательности управления). Вы увидите, что он используется в большинстве кодов, перечисленных на ссылочной странице Википедии. \e означает побег персонажа.
  • Если вы посмотрите в таблицу SGR на странице Википедии, вы увидите, что 1 - это число для светлого / полужирного текста, а 0 - для сброса. При этом CSI 1mвключается жирный шрифт и CSI 0mсбрасывается шрифт, чтобы остальная часть текста была нормальной.

В Википедии есть полный список управляющих кодов ANSI, которые вы можете использовать, если ваш эмулятор терминала поддерживает это.

редактировать

Для переносимости и читабельности вы должны использовать tputвместо кодов escape-кодов. Единственным недостатком является то, что этот tputподход не будет работать с терминалами, которые поддерживают коды ANSI, но имеют поврежденные или отсутствующие базы данных terminfo, но в этом случае сломанный terminfo представляет большую проблему, так как многие из ваших консольных приложений, использующих terminfo, могут работать неправильно.

Вот пример того, что я делаю в своем .bashrc:

# color names for readibility
reset=$(tput sgr0)
bold=$(tput bold)
black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
user_color=$green
[ "$UID" -eq 0 ] && { user_color=$red; }
PS1="\[$reset\][\[$cyan\]\A\[$reset\]]\[$user_color\]\u@\h(\l)\
\[$white\]:\[$blue\]\W\[$reset\][\[$yellow\]\$?\[$reset\]]\[$white\]\
\\$\[$reset\] "

Вот как будет выглядеть моя обобщенная версия. Это 0состояние выхода последней команды.

Скриншот PS1

jw013
источник
Хороший и понятный ответ, +1. Тем не менее я нашел ответ Гессена более точным , поэтому я выбрал его.
Бенджамин
Когда я попробовал это, я столкнулся с проблемой, такой как Терминальное приглашение неправильно упаковывает . Вы? Есть ли у вас обновленные escape-последовательности?
Стефан Ласевский
6

Это приглашение по умолчанию, которое вы получаете в оболочке cygwin bash:

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '

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

\[\e]0;\w\a\] = Set the Window title to your current working directory
\n            = new line
\[\e[32m\]    = Set text color to green
\u@\h         = display username@hostname
\[\e[33m\]    = Set text color to yellow
\w            = display working directory
\[\e[0m\]     = Reset text color to default
\n            = new line
\$            = display $ prompt

Ссылки:

Стивен Куан
источник
Хорошо, я добавил новую строку перед [user @ host], которая делает каждую команду еще более читабельной (она должна быть установлена ​​по умолчанию на терминале imo).
Бенджамин
2

Я использую эту функцию оболочки для получения текстовых атрибутов в терминале:

color () {
  if [ -z "$1" -a -z "$2" -a -z "$3" ]; then
    echo "\033[0m"
    return
  fi
  case $1 in
    black)   color_fg=30;;
    red)     color_fg=31;;
    green)   color_fg=32;;
    yellow)  color_fg=33;;
    blue)    color_fg=34;;
    magenta|purple) color_fg=35;;
    cyan)    color_fg=36;;
    white)   color_fg=37;;
    -)       color_fg='';;
    *)       color_fg=39;;
  esac
  case $2 in
    bold)      color_bd=1;;
    italics)   color_bd=3;;
    underline) color_bd=4;;
    inverse)   color_bd=7;;
    strike)    color_bd=9;;
    nobold)      color_bd=22;;
    noitalics)   color_bd=23;;
    nounderline) color_bd=24;;
    noinverse)   color_bd=27;;
    nostrike)    color_bd=29;;
    -)         color_bd='';;
    *)         color_bd=0
  esac
  case $3 in
    black)   color_bg=40;;
    red)     color_bg=41;;
    green)   color_bg=42;;
    yellow)  color_bg=43;;
    blue)    color_bg=44;;
    magenta|purple) color_bg=45;;
    cyan)    color_bg=46;;
    white)   color_bg=47;;
    -)       color_bg='';;
    *)       color_bg=49;;
  esac
  s='\033['
  if [ -n "$color_bd" ]; then
    s="${s}${color_bd}"
    if [ -n "$color_fg" -o -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_fg" ]; then
    s="${s}${color_fg}"
    if [ -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_bg" ]; then
    s="${s}${color_bg}"
  fi
  s="${s}m"
  echo "$s"
  unset s color_bd color_bg color_fg
}

Тогда использовать это:

color_reset=`color`
color_grbd=`color green bold`
color_bubd=`color blue bold`
PS1="\[${color_grbd}\][\u@\h]\[${color_reset}\]:\[$color_budb}\]\w\[${color_reset}\]> "

Это дает мне, [username@hostname]:cwd>где username@hostnameжирный зеленый и cwdжирный синий.

Arcege
источник
Спасибо за это. Я полагаю, мне также пришлось скопировать все вышеперечисленное в ~/.bashrc?
Бенджамин
Да, я установил это в своем ~/.bashrcфайле и использовал его для установки моего приглашения. Я даже меняю цвета в зависимости от системы, на которой я работаю.
Arcege
1

Чтобы это выглядело как приглашение Ubuntu по умолчанию, добавьте

export PS1='\[\e[1;32m\]\u@\h\e[0;39m\]:\e[1;34m\]\w\e[0;39m\]$\[\e[0m\] '

в вашем ~/.bashrc.

Это приведет к общеизвестному зеленому user@host(полужирному шрифту), за которым следует двоеточие, не выделенное жирным шрифтом, за которым следует рабочий каталог, выделенный полужирным синим цветом, за которым следуют $знак, пробел и команда, набранная не жирными белыми буквами:

Ubuntu Bash подскажите

Тобиас Фейл
источник