El script se puede encontrar aquí:https://stackoverflow.com/questions/14750650/how-to-delete-history-of-last-10-commands-in-shell
Para mayor comodidad, aquí está:
for x in `seq $1 $2`
do
history -d $1
done
Puse esto en mi directorio de inclusión (uno que agregué a la RUTA) donde ejecuto muchos otros scripts que he escrito y funcionan bien.
Esto no produce el resultado deseado de eliminar filas de mi historial, de hecho, no hace nada en absoluto.
¿Alguna idea de por qué el comando de historial no funciona? Me pregunto si tiene algo que ver con los directorios.
Información adicional:
Jugué con el código y probé diferentes variaciones. Si pongo un echo
delante del history
y lo ejecuto, obtengo el siguiente resultado:
[email protected]:~$ idelhistory 300 305
history -d 300
history -d 301
history -d 302
history -d 303
history -d 304
history -d 305
[email protected]:~$
Entonces, para mí, parece que debería funcionar perfectamente. No puedo entender por qué. Este script se ejecuta desde /$HOME/Scripts/ y se ha incluido en la RUTA. También intenté ejecutarlo con sudo y nada cambia.
Respuesta aceptada:
En una frase:no funciona porque no lo estás llamando correctamente.
Primero, dado que su secuencia de comandos no comienza con #!/bin/bash
, en realidad no es un script bash. El shell que lo ejecute depende de cómo lo invoque. Cuando lo invoca desde la línea de comandos de bash, bash bifurca una nueva instancia de sí mismo (esto tiene que suceder para ejecutar cualquier comando externo de todos modos), y es esta nueva instancia la que ejecuta el script. Entonces, el script se ejecuta con la misma configuración (incluido el historial hasta el momento) que el shell principal. Se ejecuta con diferentes opciones; en particular, el seguimiento del historial está desactivado para los comandos en el script (lo cual le conviene, ya que de lo contrario se agregaría al historial que desea modificar).
Si la instancia de bash que ejecuta el script tiene el HISTFILE
el conjunto de variables depende de si se exportó en el padre (lo cual es un poco extraño). Si no se exporta y, por lo tanto, se configura en el secundario, el script secundario no guardará el historial modificado cuando finalice.
Si HISTFILE
se exporta, luego el script secundario modificará su archivo de historial. Sin embargo, a menos que haya configurado su shell interactivo para recargar el historial después de cada comando, el historial modificado solo será recogido por instancias de bash recién iniciadas.
Si desea ejecutar un fragmento de shell que afecte a la instancia de shell actual, debe ejecutar ese shell en la instancia de shell actual, en lugar de ejecutarlo como un subproceso . Te encontrarías con un problema similar si quisieras hacer otras cosas que afectan el proceso de shell en sí, como cambiar directorios, establecer variables, etc. Usa el .
(“punto”) o source
integrado para ejecutar un script en el proceso de shell actual.
. idelhistory 300 365
Alternativamente, podría definir esto como una función en su .bashrc
.