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 ~/.bashrc
arquivo, 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 .
ignoredups
a propósito, é a razão pela qual history | tail -n2
aparece apenas uma vez na história no teste acima.
O histórico de um terminal é salvo na RAM e liberado para você ~/.bash_history
assim que você fecha o terminal. Se você deseja excluir uma entrada específica da sua, ~/.bash_history
você 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 -i
opção e mude !d
para d
para 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