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 $HISTFILEy borra lo que quieras. Úselohead -n -10si tiene que automatizarlo.Respuestas:
¿Has intentado editar el archivo de historial directamente?
fuente
~/.viminfoasí que asegúrese de eliminarlo también!.bash_historypueden 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 -dcomandos 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
histdelfunció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 founden Mac OSX, de lo contrario, esta sería la mejor respuesta.for h in $(seq 1006 1008); do history -d 1006; doneesto funciona en ubuntu 16.04for i in {1..10}; do history -d $(($HISTCMD-11)); donefuente
history -d 511funciona como se esperaba, luegohistory -d 512elimina lo que solía ser 513, y 512 permanece en el historial como el comando 511. Espero que tenga sentido .$xcada 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 $iy obtuve los resultados que describí en mi comentario anterior. Usando $ 1 esto es absolutamente correcto como se indica en su respuesta original.Primero, escriba:
historyy 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
$lineelimina 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 -rfuente
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 514No imprimirá nada. Es necesarioseq 563 -1 514. Alternativamente, puede usar simplementehistory -d $1con argumentos como514 563Quizá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 && exity 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
$HISTCMDentorno 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"; doneYo uso esto (tengo bash 4):
Las
builtin historypartes, así como la última,-wse 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 realhistoryincorporado (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)); donefuente