Respuestas:
Si desea ejecutar un comando sin guardarlo en el historial, agréguelo con un espacio adicional
prompt$ echo saved
prompt$ echo not saved \
> # ^ extra space
Para que esto funcione es necesario, ya sea ignorespace
o ignoreboth
en HISTCONTROL
. Por ejemplo, ejecutar
HISTCONTROL=ignorespace
Para que esta configuración sea persistente, colóquela en su .bashrc
.
Si ya ha ejecutado el comando y desea eliminarlo del historial, primero use
history
para mostrar la lista de comandos en su historial. Encuentre el número al lado del que desea eliminar (por ejemplo, 1234) y ejecute
history -d 1234
Además, si la línea que desea eliminar ya se ha escrito en su $ HISTFILE (que generalmente ocurre cuando finaliza una sesión de forma predeterminada), deberá volver a escribir en $ HISTFILE, o la línea volverá a aparecer cuando abra un nuevo sesión:
history -w
history -a
, en ese caso ya está escrito en el archivo de historial, en lugar de salir al salir en configuración normal. Específicamente: mywiki.wooledge.org/BashFAQ/088
history -w
. De lo contrario, cuando salga, la línea eliminada seguirá allí.
history -w
after history -d {num}
era exactamente lo que necesitaba: ese tidbit crítico debería agregarse a la respuesta, de lo contrario, un usuario podría pensar que una eliminación temporal del shell actual es realmente permanente.
history -w
es necesario para las entradas que ya se han escrito en el .bash_history
archivo. Cómo reproducir (p. Ej., En CentOS 7 con configuración de stock): 1. iniciar sesión 2. ingresar el comando echo foo
3. cerrar sesión 4. iniciar sesión nuevamente 5. eliminar la entrada para echo foo
6. cerrar sesión 7. iniciar sesión nuevamente: la entrada sigue ahí. Dependiendo de cómo configure su historial de bash, tal vez pueda reproducir este problema de otras maneras, es decir, si provoca la escritura del historial antes de cerrar sesión.
Para borrar todo tu historial, usa
history -c
Para eliminar una sola línea, use
history -d linenumber
Tengo esto en mi ~/.bashrc
, lo que hace que el comando $ forget
elimine el comando anterior del historial
function forget() {
history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);
}
history -d $( history | tail -n 1 | cut -f 1 -d " " )
sería más simple?
history | tail -n1
es el history
comando en sí mismo, por lo que al eliminar ese número se obtiene la entrada incorrecta. Sin embargo, history -d $( history | awk 'END{print $1-1}' )
combina la selección de línea, la selección de campo y la resta.
Si desea olvidar toda la sesión bash, puede realizar kill
el proceso bash actual. Como la variable $$
contiene el pid
shell actual, puede hacer:
kill -9 $$
Debe escribir los cambios después de borrar el historial. Y si no desea tener el comando de borrado de historial en su historial, entonces necesita ejecutar el comando así:
history -c && history -w && logout
Buena suerte.
Adding another point suppose if you want to delete a range of history lines
You can use below script.
Below example will delete history output from line 1 to line 150.
for i in `history | awk 'NR > 1 && NR <=150{print $1}'`; do history -d $i; done