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
, но это не повредит.В любом случае визуальной разницы в выводе оболочки нет.