$PROMPT_COMMAND Bash, портящий дисплей истории прокрутки

Использовать sys.path:

import sys
sys.path.append("/home/me/mypy")

Можно также проверить site документация модуля, которая объясняет, как сайт-специфичные пути вычисляются.

7
14.02.2012, 17:39
2 ответа

Вместо того, чтобы вставить его PROMPT_COMMAND, вставьте его PS1:

PS1='$($HOME/bin/myprompt) \[\033[34m\]\$\[\033[0m\] '

Когда это находится в PS1, колотите считает количество символов, которые печатаются так, чтобы оно могло правильно перерисовать при просмотре истории. Вот почему удар имеет \[ и \] специальные символы — они говорят удару, что вложенные символы не являются печатаемыми, который помогает колотить фигуру, как перерисовать подсказку при необходимости.

Обратите внимание, что замена команды в одинарных кавычках. Это предотвращает расширение во время присвоения. Если замена команды была в двойных кавычках или закрыла кавычки, вывод myprompt был бы получен однажды во время присвоения и остался бы статичным. Для поддержки значений переменных, которые изменяются со временем, оболочка разворачивает значение PS1 каждый раз подсказка отображена. Это означает, что расширение должно быть предотвращено во время присвоения путем заключения в кавычки. Это также означает, что необходимо быть осторожны относительно скорости: если замена команды займет 1 секунду для завершения, то подсказка займет 1 секунду для отображения.

11
27.01.2020, 20:16
  • 1
    Спасибо, но не был бы тот статически присваивать вывод myprompt к PS1? Я не забываю пытаться сделать что-то как этот прежде. –   13.02.2012, 05:22
  • 2
    Ой, это - ошибка. Я зафиксировал его. Замена команды должна быть в одинарных кавычках. Я имею привычку разворачивать переменные и замены команды во время присвоения, потому что это - то, что я хочу 99% времени. PS1 одно из редких исключений. –  Richard Hansen 13.02.2012, 16:57
  • 3
    Спасибо за подробное объяснение; это помогло мне зафиксировать свой PS1. Я имел PS1='\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

PROMPT_COMMAND может содержать команду, которая выполняется, прежде чем новая подсказка печатается ударом (поэтому, прежде чем PS1 будет оценен).

С мерзавцем 1.8.1, код, чтобы сделать это эффективно с PROMPT_COMMAND было выпущено. Посмотрите мерзавца-prompt.sh использования с PROMPT_COMMAND. Код может работать с более ранними версиями мерзавца, просто скопировать файл contrib/completion/git-prompt.sh в место, где можно получить его от .bashrc.

Удачи

Simon

0
27.01.2020, 20:16

Теги

Похожие вопросы