При вводе цветовых кодов ANSI в PS1
они должны быть заключены в \[\]
, иначе приглашение может запутаться в том, где начинается редактируемая часть строки.Однако, когда подкоманда ($()
) печатает цвета, экранированные символы \[\]
всегда записываются буквально в приглашение ... и с достаточно длинными командами в моей истории приглашение становится запутанным.
Вотпример:
ps1test() {
ps1sub() {
printf '\[\033[32m\]Hello!\[\033[0m\]'
}
PS1='$(ps1sub) \$ '
}
Ожидаемый:
$ ps1test
Hello! $
Факт (bash
установлен Git для Windows):
$ ps1test
\[\]Hello!\[\] $
Как мне получить мою оболочкуинтерпретировать экранирование \[\]
из подкоманды?