Excluindo alguns dos comandos de serem armazenados no histórico do bash

31

Existe alguma maneira de excluir comandos como rm -rf, svn revertde ser ficando armazenados na história bash? Na verdade, eu, por engano, os emiti várias vezes, embora não tenha intenção de fazê-lo, apenas porque estou fazendo as coisas rapidamente e isso aconteceu. Daí resulta a perda de muito trabalho que fiz até agora.

Ravi Gupta
fonte
3
Você pode estar interessado em serverfault.com/questions/48769/…
Luc M

Respostas:

53

Você pode querer $HISTIGNORE: "Uma lista de padrões separados por dois pontos usados ​​para decidir quais linhas de comando devem ser salvas na lista de histórico". Esta linha no seu ~ / .bashrc deve fazer o trabalho:

HISTIGNORE='rm *:svn revert*'

Além disso, você pode adicionar um espaço no início de um comando para excluí-lo do histórico. Isso funciona desde que $HISTCONTROLcontenha ignorespaceor ignoreboth, que é o padrão em qualquer distribuição que eu usei.

l0b0
fonte
4
o espaço é como sempre o fiz.
23412 Rob
Eu costumava inserir acidentalmente adicional y, afinal cp(alias para cp -i) superar. Então, eu fiz um alias ycomo alias y='$(history | awk '"'"'END{if(NF==2 && $2=="y"){print "history -d " $1}}'"'"')'... Mas HISTIGNOREé o melhor método que parece. :) Obrigado.
Anishsane
2
Apenas para ser mais explícito: você pode adicionar export HISTCONTROL="ignorespace"ao seu ~/.bashrcpara ignorar comandos que começam com espaços.
Aidan Feldman
@AidanFeldman não é padrão no macOS
akauppi 12/17
NOTA: o espaço deve ser incluído quando digitarmos a linha de comando e não HISTIGNORE.
Gayan Weerakutti 27/03
6

Embora seja um pouco diferente da pergunta do OP, quando intencionalmente não quero que um comando seja armazenado no histórico do bash, prefixo-os com um espaço. Funciona no Ubuntu e suas variantes, não tenho certeza se funciona em todos os sistemas.

k4rtik
fonte
6
Depende $HISTCONTROL(veja minha resposta).
L0b0
@ l0b0 certo, obrigado por apontar.
K4rtik
1

Normalmente, eu mato minha instância do bash quando faço coisas que não quero na história.

kill -9 $$

$$ representa o processo atual - bash quando você o executa a partir do shell. Você pode usar $ BASHPID, mas é mais digitação :-)

Comandante Keen
fonte
2
Algumas configurações do Bash (como esta ) salvarão o histórico após cada comando e, nesse caso, isso não funcionará.
L0b0
11
Eu costumava fazer isso. mas a configuração HISTFILE=/dev/nullé uma opção melhor.
anishsane
simplesmente HISTFILE=funciona no bash e no ksh.
Kubanczyk
ouunset HISTFILE
Todd Walton