Як зробити дисплей термінала user @ machine жирними літерами?


31

Я бачив у деяких знімках екрана (не пам'ятаю, де в Інтернеті), що термінал може відображати [username@machine /]$жирними літерами. Я також з нетерпінням чекаю цього отримати, тому що мені завжди здається, що я прокручую довгі виходи, щоб важко знайти перший рядок після моєї команди.

Як я можу зробити ім’я користувача тощо жирним або кольоровим?


Чи можете ви уточнити, чи використовуєте ви bash shell чи іншу оболонку?
Стівен Куан

Gnome Terminal bash.
Бенджамін

Відповіді:


22

Ви можете зробити це, встановивши PS1змінну підказок у вашому ~/.bashrcфайлі так:

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

Щоб зробити його кольоровим (і, можливо, жирним - це залежить від того, чи ввімкнув це емулятор терміналу), вам потрібно додати коди кольорів:

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

Тут все, що не уникне між частинами 1;91mта 0mдеталями, забарвиться 1;91кольором (жирним червоним кольором). Розташуйте ці коди евакуації навколо різних частин підказки, щоб використовувати різні кольори, але не забудьте скинути кольори, 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замість жорстких кодів аварійних кодів. Єдиним недоліком є ​​те, що tputпідхід не працюватиме з терміналами, які підтримують ANSI-коди, але мають зламані або відсутні бази даних 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


Приємна та пояснювальна відповідь, +1. І все-таки я знайшов відповідь гессе в більшій мірі, тому вибрав її замість цього.
Бенджамін

Коли я спробував це, я зіткнувся з такою проблемою, як підказка терміналу, яка не завершилася неправильно . Чи ти? У вас є оновлені послідовності втечі?
Стефан Ласєвський

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

Список літератури:


Приємно, я додав новий рядок перед [користувачем @ хостом], який робить кожну команду ще читабельнішою (вона повинна бути встановлена ​​так за замовчуванням у терміналі 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жирний синій.


Дякую за це Я думаю, мені також довелося скопіювати все вищезазначене в ~/.bashrc?
Бенджамін

Так, я встановив це у своєму ~/.bashrcфайлі і використовую його для встановлення мого підказки. Я навіть змінюю кольори залежно від системи, в якій я ввімкнувся.
Арседж

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.