Como remover uma única linha do histórico?

168

Estou trabalhando no Mac OSX, então acho que estou usando o bash ...?

Às vezes, eu digito algo que não quero ser lembrado na história. Como posso removê-lo?

    
por B Seven 26.09.2012 / 19:41

7 respostas

274

Medidas preventivas

Se você deseja executar um comando sem salvá-lo no histórico, adicione um espaço extra

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

Para que isso funcione, você precisa de ignorespace ou ignoreboth in HISTCONTROL . Por exemplo, execute

HISTCONTROL=ignorespace

Para tornar essa configuração persistente, coloque-a em .bashrc .

Limpeza post-mortem

Se você já executou o comando e deseja removê-lo do histórico, use primeiro

history

para exibir a lista de comandos no seu histórico. Encontre o número ao lado do que você deseja excluir (por exemplo, 1234) e execute

history -d 1234
    
por 26.09.2012 / 19:49
42
  1. Para limpar todo seu histórico, use

    history -c
    
  2. Para excluir uma única linha, use

    history -d linenumber
    
por 09.01.2015 / 13:13
6

Você sempre pode editar e remover entradas de ~/.bash_history , útil quando você quer remover uma entrada ou mais de uma entrada

    
por 04.03.2016 / 09:19
5

Eu tenho isso no meu ~/.bashrc , o que torna o comando $ forget excluir o comando anterior do histórico

function forget() {                                                              
   history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);              
}
    
por 03.10.2015 / 03:33
4

Se você quiser esquecer toda a sessão bash, poderá kill do atual processo bash. Como a variável $$ contém o pid do shell atual, você pode fazer:

kill -9 $$
    
por 26.01.2017 / 18:53
1

Você precisa gravar as alterações depois de limpar o histórico. E se você não gostaria de ter o histórico limpe comando em sua história, então você precisa executar o comando assim:

history -c && history -w && logout

Boa sorte.

    
por 17.03.2018 / 18:29
-1
Adding another point suppose if you want to delete a range of history lines

You can use below script. 

Below example will delete history output from line 1 to line 150.

for i in 'history | awk 'NR > 1 && NR <=150{print   $1}''; do history -d $i; done
    
por 30.11.2018 / 09:21