приглашение bash: вводится команда выделения - PullRequest
0 голосов
/ 17 февраля 2019

Ввод команды в bash выглядит следующим образом:

<Prompt $>  <The Command I Entered>
<Output Of The Command>

Я ищу способ сделать The Command I Entered жирным шрифтом.Легко начать выделять жирным шрифтом с подсказки, введя tput bold в PS1.

Однако возникает вопрос, как tput sgr0 при нажатии Enter.Могу ли я использовать readline / bash magic для достижения этой цели?

1 Ответ

0 голосов
/ 17 февраля 2019

Pre Bash 4.4:

В bash 4.3.x (а может и раньше) «отладочная ловушка» выполняется перед выполнением команды из командной строки.

trap 'tput sgr0' DEBUG

Но у этого есть один недостаток: он выполняется перед каждой простой командой, которая выполняется.Поэтому, если вы запустите:

$ echo Hello && echo World 

Ловушка отладки вызывается два раза.

Тогда следующая команда не будет работать должным образом:

tput setaf 1 ; echo "This is red"

Напечатанное «Это красный» не будет красным.

См. Ловушка отладки и PROMPT_COMMAND в Bash , а также принятый ответ на этот вопрос .

Bash 4.4

В Bash 4.4 была введена переменная $PS0.Вот цитата из справочной страницы :

Значение этого параметра расширяется (см. ЗАМЕЧАНИЕ ниже) и отображается интерактивными оболочками после чтения команды и до ее выполнения.Выполнено.

Таким образом, с помощью bash 4.4 вы можете сделать следующее:

PS0="\[$(tput sgr0)\]"

\[\] используются для включения непечатных символов (здесь управляющая последовательность терминала для сброса текстовых атрибутов)).Я не уверен, действительно ли это нужно для PS0, но это не повредит.В любом случае визуальной разницы в выводе оболочки нет.

...