Откуда расхождение между \# в PS1 и n в!n?

Что-то грызло меня некоторое время, и я не могу найти подходящий ответ ни на страницах руководства, ни с помощью вашей поисковой системы "Не будь злым".

Мой.bashrc имеет следующее:

shopt -s histappend
HISTSIZE=100
HISTFILESIZE=0   # 200 previous value

Установка HISTFILESIZE в 0 позволяет мне начинать с чистого листа истории с каждым новым окном термина.

Я считаю это практичным в сочетании с использованием приглашения, которое содержит \#потому что при визуализации предыдущей команды, прежде чем вызывать ее с !n или же !-pможно просто сделать:

$ history | more 

чтобы увидеть его значение "n"

В моем случае обычно результат:

$ \history | tail -1 | awk '{print $1}'   # (I know this is an overkill, don't flame me)

равно расширенному значению # в PS1 минус 1, что мне всегда нравится. Но иногда нет. Временами расширенное значение # вроде "убегает". Он увеличивается таким образом, что становится> чем

$(( $(\history | tail -1 | awk '{print $1}')+1 ))

Любые указатели, кто-нибудь?

1 ответ

Решение

Наиболее вероятная причина этого в том, что вы установили HISTCONTROL к значению, которое включает в себя ignoredupes, Проверьте, запустив

echo $HISTCONTROL

Если это возвращает что-то вроде ignoredups это означает, что повторяющиеся команды не сохраняются в вашей истории. Однако они учитываются PS1 \#, Это означает, что \# будет постепенно увеличиваться каждый раз, когда вы запускаете одну и ту же команду дважды, но ваш history не будет увеличиваться, и это приведет к несоответствию, которое вы наблюдаете.

Итак, либо удалите ignoredupes от HISTCONTROL (это обычно устанавливается в вашем ~/.profile но также может быть установлен в ~/.bashrc) или использовать \! вместо \# в PS1,

Другие вопросы по тегам