A veces, cuando ejecuto comandos como rm -rf XYZ
, no quiero que esto se registre en el historial de Bash, porque podría ejecutar accidentalmente el mismo comando nuevamente por reverse-i-search
. ¿Existe una buena forma de evitar que esto suceda?
Si ha establecido la HISTCONTROL
variable de entorno en ignoreboth
(que generalmente se establece de manera predeterminada), los comandos con un carácter de espacio inicial no se almacenarán en el historial (así como los duplicados).
Por ejemplo:
$ HISTCONTROL=ignoreboth
$ echo test1
$ echo test2
$ history | tail -n2
1015 echo test1
1016 history | tail -n2
Esto es lo que man bash
dice:
HISTCONTROL
Una lista de valores separados por dos puntos que controla cómo se guardan los comandos en la lista del historial. Si la lista de valores incluye
ignorespace
, las líneas que comienzan con un carácter de espacio no se guardan en la lista del historial . Un valor deignoredups
hace que las líneas que coincidan con la entrada del historial anterior no se guarden. Un valor deignoreboth
es una abreviatura deignorespace
yignoredups
. Un valor deerasedups
hace que todas las líneas anteriores que coincidan con la línea actual se eliminen de la lista del historial antes de que se guarde esa línea. Se ignora cualquier valor que no esté en la lista anterior. Si noHISTCONTROL
está configurado o no incluye un valor válido, todas las líneas leídas por el analizador de shell se guardan en la lista del historial, sujeto al valor deHISTIGNORE
. La segunda línea y las siguientes de un comando compuesto de varias líneas no se prueban y se agregan al historial independientemente del valor deHISTCONTROL
.
Ver también:
En su .bashrc / .bash_profile / donde quiera, ponga export HISTIGNORE=' *'
. Luego, comience cualquier comando que desee ignorar con un espacio.
$ ls # goes in history
$ ls # does not
HISTCONTROL
variable de entorno, que no necesariamente se ha ignorespace
establecido.
HISTCONTROL
contiene ignorespace
, en realidad solo es redundante incluir `*` en HISTIGNORE
. Los dos operan de forma independiente.
Aún mejor uso HISTIGNORE
. Esto le permite especificar un conjunto de patrones que se ignorarán (como rm
). Es mejor (creo) que simplemente canalizar toda la historia /dev/null
.
kill -9 $$
Sé que no es tan mejor como las respuestas anteriores, pero esto matará el shell Bash actual sin guardar nada, útil cuando HISTCONTROL no está configurado de forma predeterminada, se olvidó de configurarlo, o simplemente se olvidó de poner un espacio inicial y acaba de escribir algunas contraseñas y no quiere que permanezcan permanentemente en el historial.
Esta es la forma más rápida, y algo como borrar el archivo de historial no es tan bueno porque necesita hacerlo fuera de un shell para guardar el historial (inicie sesión como un usuario diferente y use su / sudo, creando un trabajo en segundo plano, etc.)
Puedes hacer una de las dos cosas:
export HISTFILE=/dev/null
O comience el comando con un espacio.
ignorespace
configurado de forma predeterminada.
HISTFILE
esta forma evita almacenar cualquier historial y no evita que el comando se agregue al historial en memoria.
O
unset HISTFILE
(similar a la respuesta anterior, pero más corta: export HISTFILE = / dev / null)
Al iniciar el shell, limpio explícitamente el historial de las entradas que no quiero que estén allí. Por ejemplo, no quiero ninguno rm -rf
en el historial (es un trauma después de eliminar un directorio lleno de resultados procesados durante la noche, solo con un solo Arrow-Up
+ Enter
:)
Puse el siguiente fragmento en mi archivo de inicio (funciona con .zshrc
, también debería funcionar con .bashrc
)
# ...
HISTFILE=~/.zshhistory
# ...
# remove dangerous entries from the shell history
temp_histfile="/tmp/$$.temp_histfile"
grep -v -P '^rm .*-rf' $HISTFILE > $temp_histfile
mv $temp_histfile $HISTFILE
bash
se puede usar para escribir scripts de shell (por lo tanto, programación), este aspecto particular no tiene absolutamente nada que ver con la programación (la historia es una cosa interactiva solamente). Votación para cerrar.