Limpeza automática do histórico do Bash

3

Como o histórico do Bash pode ser limpo automaticamente? Por exemplo

  • Remover erros de digitação detectáveis do histórico ( ls-lh não aparece em which , então é removido, eu quis digitar ls -lh )
  • Limpar espaços excessivos cd  / e cd /    devem ser normalizados para que sejam iguais.

Isso pode ser feito em bash? Talvez um filtro em todos os comandos antes de serem executados, ou antes de entrarem na história?

Espero não ter que esperar até que seja gravado no arquivo antes de executar uma rotina de limpeza. Isso significaria sair antes que a limpeza ocorra. :(

    
por George Bailey 02.01.2012 / 21:01

3 respostas

1

Eu preferiria manter alias a todos os erros comuns que acontecem exemplo

alias ls-lh = ls -lh

Use o alias para corrigir erros de digitação de espaços ausentes:

alias cd..='cd ..

Use HISTIGNORE para especificar todos os comandos que você deseja ignorar do histórico. use export HISTIGNORE="$LIST" na lista que você deseja ignorar dentro do histórico

Existem várias outras opções de interesse controladas pelo comando 'shopt' incorporado.

veja aqui

    
por 02.01.2012 / 22:26
1

Não conheço nenhuma maneira de personalizar o histórico além das poucas variáveis HIST… . Você pode querer mudar para o zsh, que é um pouco mais inteligente (mas só um pouco). Em zsh, você pode ativar a autocorreção de comandos ( setopt correct ), o que sugere uma correção para alguns erros de digitação com base nos nomes de comandos disponíveis (por exemplo, no meu sistema ele oferece para corrigir sl para ls , mas não faz nada sobre ls-lh ). A duplicata de Zsh é mais inteligente, pois detecta duplicatas não consecutivas (em setopt hist_ignore_all_dups ) . Zsh não faz nenhuma normalização de espaço em branco no histórico, mas o sistema de completação é um pouco mais esperto que o de manter a quantidade de espaço em branco consistente se você digitar um nome completo ou pressionar Tab , o que ajuda. / p>     

por 03.01.2012 / 01:59
0

De este blog , esse script pode remover automaticamente todos os comandos que não são encontrados por bash.

Se você ainda não tiver um bash PROMPT_COMMAND , adicione isso a .bashrc :

PROMPT_COMMAND="mypromptcommand"
function mypromptcommand {
}

Essa função será executada toda vez que seu prompt estiver prestes a aparecer. Dentro disso, nós colocamos isso:

local exit_status=$?
# If the exit status was 127, the command was not found. Let's remove it from history
local number=$(history | tail -n 1 | awk '{print $1}')
if [ -n "$number" ]; then
    if [ $exit_status -eq 127 ] && ([ -z $HISTLASTENTRY ] || [ $HISTLASTENTRY -lt $number ]); then
        history -d $number
    else
        HISTLASTENTRY=$number
    fi
fi

O link fornece a explicação de como funciona

    
por 16.06.2014 / 15:01