Как я могу периодически показывать номер своей истории в командной строке? Например, вместо того, чтобы показывать это в КАЖДОМ приглашении, просто делайте это каждые 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 ))"
Я нахожусь на грани веры, что в настоящее время это невозможно. Я бы хотел, чтобы кто-то доказал, что я не прав.