Настройка оболочки bash: выделите / выделите цветом команду

13

В Интернете есть несколько учебных пособий / сообщений (например, http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/ ) о том, как настроить приглашение в bash, установив PS1. Есть ли способ настроить цвет / жирный шрифт команды, которую я набираю?

Другими словами, в качестве примера скажем, что я хотел зеленую подсказку, жирную синюю команду, а затем выводил в любых цветах по умолчанию. В приведенном ниже примере я уже знаю, как сделать так, чтобы " joe>" показывалось зеленым, синим, жирным шрифтом, независимо от настроек PS1. Но есть ли способ, как я могу сделать git statusшоу, например, жирным шрифтом?

joe> git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
...
jlarson
источник
Если вы хотите действительно хорошую оболочку, вы должны использовать zsh, чего бы вы хотели добиться - это очень простоpreexec() { printf '\e[0m' }
bollovan
3
@bollovan - «Действительно хорошо» немного субъективно, я считаю его действительно отвратительным из-за его раздувания и несоответствия POSIX. Но все, что плывет на твоей лодке.
Крис Даун
@ChrisDown раздувает вашу лодку - никогда не слышал, довольно забавно.
n611x007

Ответы:

13

Вы должны оставить цветовой трейлинг после PS1 (запустите его после >в вашем примере), а затем используйте DEBUGловушку bash, чтобы очистить цвет перед выполнением команды (но после того, как вы нажмете enter в вашей оболочке. Попробуйте что-то вроде этого :

shopt -s extdebug
trap "tput sgr0" DEBUG
Крис Даун
источник
для кого-то незнакомого, чтобы избежать кодов: сохранит ли это первоначальный цвет команды (например, ls --color=alwaysбудет окрашен)?
n611x007
@naxa - Да, поскольку это явно устанавливает цветовые коды (за исключением цветов, которые окрашены в цвет терминала по умолчанию, который вступит в силу только после первого цвета).
Крис Даун
Этот трюк, кажется, мешает завершению табуляции (печатает странные вещи вроде ^[(B^[[m). Это происходит только в некоторых системах: я проверил это на двух системах, на обеих работала Ubuntu 12.04 LTS, и только одна из них имела помехи.
Musiphil
7

Для полноты, вот как установить цвет подсказки и цвет ввода командной строки в bash. Поместите эти строки в свой .bashrc.

PS1='\[\e[1;34m\]\w\$ \[\e[0;32m\]'
trap 'printf \\e[0m' DEBUG

Ловушка DEBUG, предложенная Крисом Дауном , используется для сброса атрибутов текста. Он предназначен для отладки, но также полезен для выполнения кода перед выполнением команды, введенной пользователем .

В настройках подсказки:

  • \[…\] используется вокруг escape-последовательностей, чтобы сообщить bash, что они не занимают никакого экрана (без них экран будет искажен, когда bash потребуется перерисовать приглашение).
  • \e[…mгде число, или, в более общем случае, последовательность чисел, разделенных точками с запятой, представляет собой управляющую последовательность, отправляемую терминалу для воздействия на цвет и другие атрибуты следующего текста. Например, 1;34устанавливает жирный синий цвет; 0;32сбрасывает все атрибуты, затем меняет цвет на зеленый. Отрегулируйте по вкусу.
  • \w\$распечатать текущий каталог и $или #. Вы можете, конечно, изменить это на что угодно, и вставить текстовые атрибуты между ними, если хотите.
  • В конце есть последнее изменение атрибута, которое устанавливает цвет ввода текста.
Жиль "ТАК - прекрати быть злым"
источник
К вашему сведению, коды цветов / последовательности bash можно посмотреть здесь: misc.flogisoft.com/bash/tip_colors_and_formatting
kaiwan
0

Я только изучаю команды BASH и сижу здесь, играя с командами цвета в моей версии. Я понял это решение:

Используя эту команду:

PS1='\[\e[0:36m\]\h>\[\e[0;31m\]'

Разобрать: PS1 =: запускает команду PS1

'': содержать команду в одинарных кавычках (поэтому BASH не считает, что это команда для нее)

\: каждая отдельная команда начинается с этого

[]: содержать каждую команду

\ e (также может быть \ 033 управляющим символом ASCII): запускает команду цвета

Команда color предшествует тому, к чему она относится.

[\ e [0; 36 м]: голубой

\ h: имя хоста

'>': печатается после имени хоста

[\ e [0; 31 м]: красный

Очевидно, красная команда в конце делает ввод красным. Просто измените цвета по своему вкусу, и это то, что вы ищете.

Также этот сайт мне немного помог:

https://www.linuxnix.com/linuxunix-shell-ps1-prompt-explained-in-detail/

Моя версия: GNU bash, v. 4.2.46

Береги себя,

ласка

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