Откуда расхождение между \# в 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
,