Как остановить приращение числа команды на дублирующейся команде?

Проблема

Благодаря этому вопросу я успешно выполняюсь, чтобы запретить моему удару снабжать ту же команду больше чем в один раз, если я много раз пишу ту же команду.

Однако существует все еще деталь, которую я не могу разрешить: моя подсказка содержит \# специальный символ, что число команды печати для каждой команды. И это все еще увеличивает себя каждый раз, когда я ввожу команду, дубликат или нет, даже если моя история не заполняется.

Образец

В моем ~/.bashrc, моя подсказка похожа на это:

export PS1='aracthor \# >'

И когда я много раз пишу ту же команду, инкремент числа команды:

aracthor 1 >pwd
/home/aracthor
aracthor 2 >pwd
/home/aracthor
aracthor 3 >

Как я могу избежать, чтобы команда пронумеровала его для постепенного увеличения?

Я использую Ubuntu 14.04.02 и declare -p HISTCONTROL вывод:

declare -x HISTCONTROL="ignoredups:erasedups"
3
задан 13 April 2017 в 15:24

2 ответа

Читайте man bash, set встроенный, и раздел по HISTCONTROL:

       HISTCONTROL
          A colon-separated list of values controlling how commands are saved on the history list.  If the list of values includes ignorespace, lines
          which begin with a space character are not saved in the history list.  A value of ignoredups causes lines  matching  the  previous  history
          entry  to not be saved.  A value of ignoreboth is shorthand for ignorespace and ignoredups.  A value of erasedups causes all previous lines
          matching the current line to be removed from the history list before that line is saved.  Any value not in the above list is  ignored.   If
          HISTCONTROL  is  unset, or does not include a valid value, all lines read by the shell parser are saved on the history list, subject to the
          value of HISTIGNORE.  The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regard‐
          less of the value of HISTCONTROL.

В моем ~/.bashrc я имею:

export HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups

Вот пример:

w3@aardvark:~(0)$ echo $HISTCONTROL
ignoreboth
w3@aardvark:~(0)$ date
Sat Jun 27 19:50:56 EDT 2015
w3@aardvark:~(0)$ date
Sat Jun 27 19:50:57 EDT 2015
w3@aardvark:~(0)$ date
Sat Jun 27 19:50:58 EDT 2015
w3@aardvark:~(0)$ history
    1  cd
    2  echo $HISTCONTROL
    3  date
    4  history
w3@aardvark:~(0)$  

Выполнение date после history будет регистрироваться и считаться.

1
ответ дан 1 December 2019 в 17:02

Обычно \! увеличит, как Вы хотите, но когда Вы достигнете предела истории HISTSIZE строк для хранения в памяти, это остановится. Вы могли попробовать намного больший HISTSIZE.

Или вместо этого, Вы могли установить больший HISTSIZE и HISTFILESIZE и выполнить команду перед каждой подсказкой для сохранения истории:

PROMPT_COMMAND='history -w'

Тогда в Вашем PS1 можно выполнить команду для подсчета строк истории в файле:

PS1='\w #=\# !=\! file=$(wc -l <$HISTFILE) $ '
1
ответ дан 1 December 2019 в 17:02

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

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