Como mesclar histórico duplicado de comando no terminal?

2

Você tem uma experiência como essa?

Quando você tenta encontrar um comando usado no terminal anterior por up arrow e você encontra

$ls         # 1st time push 'up arrow'
$ls         # 2nd time push 'up arrow'
$ls         # 3rd time push 'up arrow'
$ls         # 4th time push 'up arrow'
$ls         # 5th time push 'up arrow'
$ls         # 6th time push 'up arrow'
$make       # 7th time push 'up arrow'
$make       # 8th time push 'up arrow'
$make       # 9th time push 'up arrow'
$ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"   # Bingo!

melhor se for assim

$ls         # 1st time push 'up arrow'
$make       # 2th time push 'up arrow'
$ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"   # Bingo!

porque o histórico duplicado geralmente não é usado.

Alguma ideia?

    
por fronthem 02.02.2015 / 22:16

2 respostas

4

Você pode fazer isso definindo ignoredups na variável de ambiente HISTCONTROL:

export HISTCONTROL="ignoredups"

Do bash manpage:

   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 regardless of the value of
          HISTCONTROL.
    
por 02.02.2015 / 22:36
1

Para adicionar à resposta @jordanm, acho que você deve usar HISTCONTROL de fato, mas com o valor "erasedups" .

"Um valor de erasedups faz com que todas as linhas anteriores que correspondem à linha atual sejam removidas da lista de histórico antes que a linha seja salva."

export HISTCONTROL="ignoreboth:erasedups"

Adicione ao seu ~/.bashrc para que ele seja executado toda vez que você fizer login.

Na verdade, isso foi answer antes

Eu queria adicionar um comentário, mas não posso por causa da minha reputação.

    
por 20.09.2016 / 09:25