Apagar as últimas N linhas do histórico bash

35

Ao colar acidentalmente um arquivo no shell, ele coloca uma tonelada de entradas feias sem sentido no histórico do bash. Existe uma maneira limpa de remover essas entradas? Obviamente, eu poderia fechar o shell e editar o arquivo .bash_history manualmente, mas talvez haja algum tipo de API disponível para modificar o histórico do shell atual?

    
por ThiefMaster 17.02.2013 / 13:40

2 respostas

32

Você pode usar o history -d offset incorporado para excluir um conteúdo específico linha do histórico do shell atual ou history -c para limpar todo o histórico.

Não é realmente prático se você deseja remover um intervalo de linhas, já que leva apenas um deslocamento como argumento, mas você pode envolvê-lo em uma função com um loop.

rmhist() {
    start=$1
    end=$2
    count=$(( end - start ))
    while [ $count -ge 0 ] ; do
        history -d $start
        ((count--))
    done
}

Chame com rmhist first_line_to_delete last_line_to_delete . (Números de linha de acordo com a saída de history .)

(Use history -w para forçar uma gravação no arquivo de histórico.)

    
por 17.02.2013 / 14:17
20

Apenas este forro no prompt de comando ajudará.

for i in {1..N}; do history -d START_NUM; done

Onde START_NUM está começando a posição de entrada no histórico. N é o número de entradas que você pode querer excluir.

ex: for i in {1..50}; do history -d 1030; done

    
por 08.04.2016 / 11:33