Los comandos siguen
511 clear
512 history
513 history -d 505
514 history
515 history -d 507 510 513
516 history
517 history -d 509
518 history
519 history -d 511
520 history
Puedo eliminar uno solo por history -d 511
, pero ¿cómo eliminar los últimos 10 comandos y entre el historial de 10 comandos usando un solo comando en shell?
¿Podemos escribir un script bash y ejecutarlo para eliminar el historial?
vi $HISTFILE
y borra lo que quieras. Úselohead -n -10
si tiene que automatizarlo.Respuestas:
¿Has intentado editar el archivo de historial directamente?
fuente
~/.viminfo
así que asegúrese de eliminarlo también!.bash_history
pueden sobrescribirse por lo que se guarda en la memoria. Esta solución me pareció útil: superuser.com/a/384383/253543Mi respuesta se basa en respuestas anteriores, pero con la adición de invertir la secuencia para que los elementos del historial se eliminen del más reciente al menos reciente.
Obtenga su historial actual (ajuste la cantidad de líneas que desea ver):
Esto me da algo como
Seleccione las posiciones inicial y final para los elementos que desea eliminar. Voy a eliminar las entradas 1006 a 1008.
Esto generará
history -d
comandos para 1006, luego 1007 se convierte en 1006 y 1006 se elimina, luego 1008 (se convirtió en 1007) ahora es 1006 y se elimina.Si también quisiera eliminar el comando de eliminación del historial, entonces es un poco más complicado porque necesita conocer la entrada actual máxima del historial.
Puede obtener esto con (puede haber una mejor manera):
Al unirlo, puede usar esto para eliminar un rango y también eliminar el comando de eliminación del historial:
Envuelva todo esto en una función para agregar a su
~/.bashrc
:Ejemplo eliminando los comandos 4, 5 y 6 (1049-1051) y ocultando la evidencia:
La pregunta era eliminar los últimos 10 comandos del historial, por lo que si desea ahorrar un poco de esfuerzo, podría usar otra función para llamar a la
histdel
función que hace los cálculos por usted.Esta función toma 1 argumento, el número de elementos de historial anteriores para eliminar. Entonces, para eliminar los últimos 10 comandos del historial, simplemente use
histdeln 10
.fuente
history | tail -1 | awk '{print $1}'
se puede simplificar ahistory 1 | awk '{print $1}'
-bash: tac: command not found
en Mac OSX, de lo contrario, esta sería la mejor respuesta.for h in $(seq 1006 1008); do history -d 1006; done
esto funciona en ubuntu 16.04for i in {1..10}; do history -d $(($HISTCMD-11)); done
fuente
history -d 511
funciona como se esperaba, luegohistory -d 512
elimina lo que solía ser 513, y 512 permanece en el historial como el comando 511. Espero que tenga sentido .$x
cada vez a través del ciclo, estoy borrando$1
. Por lo tanto, primero elimina 511 y 512 se convierte en 511. Luego, elimina 511 nuevamente, y así sucesivamente.for i in
...history -d $i
y obtuve los resultados que describí en mi comentario anterior. Usando $ 1 esto es absolutamente correcto como se indica en su respuesta original.Primero, escriba:
history
y escriba la secuencia de números de línea que desea eliminar.Para borrar líneas de, digamos la línea 1800 a 1815, escriba lo siguiente en la terminal:
Si desea eliminar el historial del comando de eliminación, agregue +1 para 1815 = 1816 y el historial de esa secuencia + se eliminará el comando de eliminación.
Por ejemplo :
fuente
$line
elimina cualquier otra línea y luego excede el rango deseado.Con Bash 5 ahora puedes hacer un rango ... ¡Hurra !:
o contando hacia atrás 10:
Extracto de la página de manual de Bash 5 :
Aquí está mi solución para Bash 4. Elimina iterativamente una sola entrada o un rango de historial que comienza con el índice más bajo.
fuente
Combinando respuestas de arriba:
history -w vi ~/.bash_history history -r
fuente
editar:
Cambió los iteradores arriostrados, buena decisión. Además, llame a esta función con un iterador inverso.
Probablemente puedas hacer algo como esto:
Donde evocarás así:
Tenga en cuenta que no he colocado ningún error al registrar los límites. Lo dejaré como ejercicio para el lector.
ver también esta pregunta
fuente
seq 563 514
No imprimirá nada. Es necesarioseq 563 -1 514
. Alternativamente, puede usar simplementehistory -d $1
con argumentos como514 563
Quizás sea útil para alguien.
Cuando inicia sesión en cualquier usuario de cualquier consola / terminal, el historial de su sesión actual solo existe en algún "búfer" que se vacía a ~ / .bash_history en su cierre de sesión.
Entonces, para mantener las cosas en secreto, puede simplemente:
history -r && exit
y se cerrará la sesión con todo el historial de su sesión (y solo) borrado;)
fuente
Utilicé una combinación de soluciones compartidas en este hilo para borrar el rastro en el historial de comandos. Primero, verifiqué dónde se guarda el historial de comandos con:
Edité la historia con:
Después de eso, enjuago el búfer de historial de sesión actual con:
La próxima vez que ingrese a esta sesión, el último comando que verá en el historial de comandos es el último que dejó en pathToFile .
fuente
history -c borrará todas las historias.
fuente
para eliminar las últimas 10 entradas (según su ejemplo):
fuente
Utilizo este script para eliminar los últimos 10 comandos en la historia:
Utiliza el
$HISTCMD
entorno var para obtener el índice del historial y lo utiliza para eliminar las últimas 10 entradashistory
.fuente
Intenta lo siguiente:
fuente
for i in {511..520}; do history -d $i; echo "history -d 511"; done
Yo uso esto (tengo bash 4):
Las
builtin history
partes, así como la última,-w
se deben a que tengo una variación de los famosos trucos para compartir la historia entre terminales y esta función se rompería sin esas partes. Aseguran una llamada al bash realhistory
incorporado (y no a mi propio contenedor), y a escribir el historial en HISTFILE justo después de que se eliminen las entradas.Sin embargo, esto funcionará tal como está con las configuraciones de historial "normales".
Debe llamarlo con el número de las últimas entradas que desea eliminar, por ejemplo:
Eliminará las últimas 10 entradas.
fuente
Bruto pero funcional
fuente
Si desea eliminar 10 líneas, simplemente cambie el valor de N a 10.
fuente
Una función simple puede matar a todos por número (aunque molesta los errores)
fuente
Corto pero dulce:
for i in {1..10}; do history -d $(($HISTCMD-11)); done
fuente