Para não salvar um único comando em seu histórico, basta precedê-lo com um espaço (marcado com ␣
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
Este comportamento está definido no seu arquivo ~/.bashrc
, 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 salvo 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 são salvo na lista de histórico . Um valor de ignorados causa linhas correspondendo a entrada do histórico anterior para não ser salvo. Um valor de ignoreboth é um atalho para ignorespace e ignorados .
ignoredups
, a propósito, é a razão pela qual history | tail -n2
aparece apenas uma vez no histórico do teste acima.
O histórico de um terminal é salvo na RAM e liberado para o seu ~/.bash_history
assim que você fecha o terminal. Se você quiser excluir uma entrada específica do seu ~/.bash_history
, poderá 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, mudei o delimitador padrão /
para _
como é usado dentro do termo de pesquisa. Na verdade, isso é igual a sed -i '/\/path\//d' .bash_history
. Se o comando gerar apenas as linhas que você deseja excluir, adicione a opção -i
e altere !d
para d
para realizar 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