Вместо того, чтобы вставить его PROMPT_COMMAND
, вставьте его PS1
:
PS1='$($HOME/bin/myprompt) \[\033[34m\]\$\[\033[0m\] '
Когда это находится в PS1
, колотите считает количество символов, которые печатаются так, чтобы оно могло правильно перерисовать при просмотре истории. Вот почему удар имеет \[
и \]
специальные символы — они говорят удару, что вложенные символы не являются печатаемыми, который помогает колотить фигуру, как перерисовать подсказку при необходимости.
Обратите внимание, что замена команды в одинарных кавычках. Это предотвращает расширение во время присвоения. Если замена команды была в двойных кавычках или закрыла кавычки, вывод myprompt
был бы получен однажды во время присвоения и остался бы статичным. Для поддержки значений переменных, которые изменяются со временем, оболочка разворачивает значение PS1
каждый раз подсказка отображена. Это означает, что расширение должно быть предотвращено во время присвоения путем заключения в кавычки. Это также означает, что необходимо быть осторожны относительно скорости: если замена команды займет 1 секунду для завершения, то подсказка займет 1 секунду для отображения.
PROMPT_COMMAND может содержать команду, которая выполняется, прежде чем новая подсказка печатается ударом (поэтому, прежде чем PS1 будет оценен).
С мерзавцем 1.8.1, код, чтобы сделать это эффективно с PROMPT_COMMAND было выпущено. Посмотрите мерзавца-prompt.sh использования с PROMPT_COMMAND. Код может работать с более ранними версиями мерзавца, просто скопировать файл contrib/completion/git-prompt.sh в место, где можно получить его от .bashrc.
Удачи
Simon
myprompt
к PS1? Я не забываю пытаться сделать что-то как этот прежде. – 13.02.2012, 05:22PS1
одно из редких исключений. – Richard Hansen 13.02.2012, 16:57PS1='\033]0;\u@\h\007[\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\]]\$ '
который устанавливает заголовок окна и показывает '$ полного пути user@host', но курсор переносился неожиданно. После добавления\[
и\]
быть похожими на это:PS1='\[\033]0;\u@\h\007\][\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\]]\$ '
это хорошо работает! – Benjamin Goodacre 30.06.2014, 13:52