Как я могу периодически показывать номер своей истории в командной строке? - PullRequest
4 голосов
/ 29 декабря 2010

Как я могу периодически показывать номер своей истории в командной строке? Например, вместо того, чтобы показывать это в КАЖДОМ приглашении, просто делайте это каждые 7 раз. (Я использую zsh, но я думаю, что bash должен быть практически идентичен.) Проблема, с которой я сталкиваюсь, заключается в том, что% h не оценивается, пока он не находится в переменной PROMPT, а $ HISTCMD всегда оценивается как 0 по некоторым причинам. Поэтому поместить такую ​​функцию в мое приглашение не удастся, потому что $ HISTCMD всегда равно 0:

prompt_history() {
CYCLE=$(( $HISTCMD % 7 ))
if [[ "$CYCLE" = "0" ]]; then
echo -ne "$HISTCMD"
fi
}

PROMPT="$(prompt_history) blah-blah >:"

Это можно частично исправить, повторив «% h» вместо «$ HISTCMD», но только частично.

Это еще более осложняется тем, что команда history не работает (кажется, что) в файле .zshrc, поэтому что-то вроде этого не будет работать:

CYCLE="$(( $(history 1 | wc -l) % 7 ))"

(Если вы используете bash, замените «history 1» на «history».)

Кроме того, файл истории не может использоваться в качестве источника этой информации, поскольку (по крайней мере, так, как у меня все настроено - и я бы не хотел менять эту конфигурацию) история не передается между сеансами до закрытия сеанса zsh и его история добавлена ​​в мой $ HISTFILE. Следовательно, это не сработает:

CYCLE="$(( $(cat $HISTFILE | wc -l) % 7 ))"

Я нахожусь на грани веры, что в настоящее время это невозможно. Я бы хотел, чтобы кто-то доказал, что я не прав.

1 Ответ

4 голосов
/ 29 декабря 2010

Вам просто нужно отложить оценку приглашения до его выдачи. Просто измените двойные кавычки на одинарные:

PROMPT='$(prompt_history) blah-blah >:'
...