Para não salvar um único comando no seu histórico, basta precedê-lo com um espaço (marcado ␣aqui):
$ echo test
test
$ history | tail -n2
3431 echo test
3432 history | tail -n2
$ ␣echo test2
test2
$ history | tail -n2
3431 echo test
3432 history | tail -n2
Esse comportamento é definido no seu ~/.bashrcarquivo, ou seja, nesta linha:
HISTCONTROL=ignoreboth
man bash diz:
HISTCONTROL
Uma lista de valores separados por dois pontos que controla como os comandos são salvos na lista de histórico. Se a lista de valores incluir
ignorespace , as linhas que começam com um caractere de espaço não serão salvas na lista de histórico . Um valor de ignoredups faz com que as linhas correspondentes à entrada do histórico anterior não sejam salvas. Um valor de
ignoreboth é uma abreviação de ignorespace e ignoredups .
ignoredupsa propósito, é a razão pela qual history | tail -n2aparece apenas uma vez na história no teste acima.
O histórico de um terminal é salvo na RAM e liberado para você ~/.bash_historyassim que você fecha o terminal. Se você deseja excluir uma entrada específica da sua, ~/.bash_historyvocê pode fazê-lo com sed:
# print every line…
sed '/^exit$/!d' .bash_history # … which is just “exit”
sed '/^history/!d' .bash_history # … beginning with “history”
sed '/>>log$/!d' .bash_history # … ending with “>>log”
sed '\_/path/_!d' .bash_history # … containing “/path/” anywhere
No último, alterei o delimitador padrão /para _como ele é usado dentro do termo de pesquisa, na verdade, é igual a sed -i '/\/path\//d' .bash_history. Se o comando exibir apenas as linhas que você deseja excluir, adicione a -iopção e mude !dpara dpara executar a exclusão:
# delete every line…
sed -i '/^exit$/d' .bash_history # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history # … ending with “>>log”
sed -i '\_/path/_d' .bash_history # … containing “/path/” anywhere