откуда расхождение между \ # в 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
задан 13 June 2014 в 14:06

1 ответ

Самая вероятная причина этого состоит в том, что Вы установили HISTCONTROL к значению, которое включает ignoredupes. Тест путем выполнения

echo $HISTCONTROL

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

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

0
ответ дан 13 June 2014 в 14:06

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

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