Давайте очистим его немного и сделаем его более портативным. В целом, лучше использовать tput
генерировать управляющие последовательности вместо трудного кодирования их, как описано в Bash FAQ 53. Таким образом, намного легче найти Ваших пропавших без вести \]
.
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
white=$(tput setaf 7)
reset=$(tput sgr0)
PS1="\[$red\][\[$yellow\]\A\[$red\]] \u:\[$green\]\W\[$white\]\$\[$reset\] "
Обратите внимание, что я заменил Ваш date
вызов со встроенным быстрым Escape \A
это отображает то же самое (24-часовое время в HH:MM
формат).
Существует один протест с этим подходом, как описано в связанном Bash FAQ, где вывод был бы искажен если любой из tput
управляющие последовательности производят что-то, что, оказалось, содержало быстрый Escape. Я никогда не сталкивался с той проблемой, таким образом, я обычно игнорирую ее.
Вы разбалансировали Ваш \[
и \]
. Управляющие последовательности должны быть перенесены в них, так, чтобы удар знал, что они на самом деле не занимают места в Вашем терминале.
Попробуйте это:
PS1="\[\033[1;31m\][\[\033[1;33m\]\$(date +%H:%M)\[\033[1;31m\]] \u:\[\033[1;32m\]\W\[\033[1;37m\]\$\[\033[0m\] "
Решение @jw013 еще лучше, тем не менее, поскольку это намного более чисто.
Таблица ASCII имеет ссылку цветов, полужирных, курсивных, и и т.д.
tput
. Таким образом, все более ясно и читаемо.Спасибо! – rubik 14.08.2012, 21:06bold_style=$(tput bold)
и\[$bold_style\]
в начале строки для создания всего полужирным как в моем вопросе. – rubik 14.08.2012, 21:13