Excluir que algunos de los comandos se almacenen en el historial de bash

31

¿Hay alguna forma de excluir comandos como rm -rf, svn revertde ser almacenados en el historial bash? En realidad, por error, los he emitido varias veces a pesar de que no tengo intención de hacerlo, solo porque estoy haciendo las cosas rápidamente y sucedió. Por lo tanto, resulta en la pérdida de mucho trabajo que he hecho hasta ahora.

Ravi Gupta
fuente
3
Quizás te interese serverfault.com/questions/48769/…
Luc M

Respuestas:

53

Es posible que desee $HISTIGNORE: "Una lista de patrones separados por dos puntos utilizados para decidir qué líneas de comando deben guardarse en la lista del historial". Esta línea en su ~ / .bashrc debería hacer el trabajo:

HISTIGNORE='rm *:svn revert*'

Además, puede agregar un espacio al comienzo de un comando para excluirlo del historial. Esto funciona siempre que $HISTCONTROLcontenga ignorespaceo ignoreboth, que es el valor predeterminado en cualquier distribución que haya usado.

l0b0
fuente
44
El espacio es como siempre lo he hecho.
Rob
Solía ​​ingresar accidentalmente más y, después de todo cp(alias para cp -i) superar. Así que alias ycomo alias y='$(history | awk '"'"'END{if(NF==2 && $2=="y"){print "history -d " $1}}'"'"')'... Pero HISTIGNOREes un mejor método como parece. :) Gracias.
anishsane
2
Solo para ser más explícito: puede agregar export HISTCONTROL="ignorespace"a su ~/.bashrcpara ignorar los comandos que comienzan con espacios.
Aidan Feldman
@AidanFeldman no predeterminado en macOS
akauppi
NOTA: se debe incluir espacio cuando escribimos en la línea de comando y no en HISTIGNORE.
Gayan Weerakutti
6

Aunque va un poco diferente de la pregunta de OP, cuando intencionalmente no quiero que un comando se almacene en el historial de bash, los prefijo con un espacio. Funciona en Ubuntu y sus variantes, no estoy seguro si funciona en todos los sistemas.

k4rtik
fuente
66
Depende de $HISTCONTROL(ver mi respuesta).
l0b0
@ l0b0 bien, gracias por señalar.
k4rtik
1

Por lo general, mato mi instancia de bash cuando he hecho cosas que no quiero en la historia.

kill -9 $$

$$ representa el proceso actual: bash cuando lo ejecutas desde el shell. Puede usar $ BASHPID, pero eso es más escribir :-)

Comandante Keen
fuente
2
Algunas configuraciones de Bash (como esta ) guardarán el historial después de cada comando, y en ese caso esto no funcionará.
l0b0
1
Solía ​​hacer esto. pero la configuración HISTFILE=/dev/nulles una mejor opción.
anishsane
simplemente HISTFILE=funciona tanto en bash como en ksh.
kubanczyk
ounset HISTFILE
Todd Walton