Uso bash y me gustaría evitar que algunos comandos se mantengan en el historial.
- ¿Es posible hacer eso solo para el siguiente comando?
- ¿Es posible hacer eso durante toda la sesión?
Uso bash y me gustaría evitar que algunos comandos se mantengan en el historial.
Respuestas:
y acabo de recordar otra respuesta, esta es la respuesta real a tu pregunta.
si tiene "ignorespace" en HISTCONTROL, bash no recordará ninguna línea que comience con un carácter de espacio. ni siquiera aparecerá en el historial del shell actual, y mucho menos se guardará en $ HISTFILE.
por ejemplo, he exportado HISTCONTROL = 'ignoreboth: erasedups' en mi ~ / .bashrc
Aquí están los detalles de la página de manual de bash:
HISTCONTROL Una lista de valores separados por dos puntos que controlan cómo son los comandos guardado en la lista del historial. Si la lista de valores incluye ignorespace, las líneas que comienzan con un carácter de espacio no son guardado en la lista del historial. Un valor de ignoredups provoca líneas que coincida con la entrada del historial anterior para no guardarse. Un valor de ignoreboth es la abreviatura de ignorespace e ignoredups. Un valor de borrados provoca que todas las líneas anteriores coincidan con la línea actual para eliminarse de la lista del historial antes de guardar esa línea. Cualquier valor que no esté en la lista anterior se ignora. Si HISTCONTROL es desarmado o no incluye un valor válido, todas las líneas leídas por el analizador de shell se guarda en la lista del historial, sujeto al valor de HISTIGNORE. La segunda y siguientes líneas de una línea múltiple el comando compuesto no se prueba y se agrega al historial independientemente del valor de HISTCONTROL.
Aquí hay algunas lecciones de historia que aprendí de googlear:
Puede configurar el historial para ignorar ciertas cadenas. En este ejemplo, ignoré los comandos ls, passwd y cualquier comando prefijado por el espacio de caracteres.
export HISTIGNORE = "ls: passwd:"
Para deshabilitar el historial de su sesión, puede emitir:
export HISTSIZE = 0
Si solo desea eliminar el último comando del historial, puede presionar Up-arrow, seguido de Ctrl - U(borrar hasta el comienzo de la línea), y luego Up-arrownuevamente.
Puede borrar cualquier línea individual del historial de esta manera. Simplemente use la flecha hacia arriba o buscar o lo que sea para convertirla en la línea de comando actual que se está editando, luego presione Ctrl - Uy luego Up-arrowo Down-arrowpara pasar a otra línea del historial.
Descubrí esto por accidente hace un día años. No tengo idea de si está documentado o no.
En general, sin embargo, es menos complicado no guardar el historial actual del shell con:
HISTFILE=/dev/null
Podrías desarmar la HISTFILE
variable. De man bash
:
Archivo Histórico El nombre del archivo en el que se guarda el historial de comandos (vea SU- TORY a continuación). El valor predeterminado es ~ / .bash_history. Si no está configurado, el historial de comandos no se guarda cuando un shell interactivo salidas
No creo que esto evite que el comando aparezca en el historial del shell local antes de que el shell salga.
Veo que nadie escribió este método, así que lo haré.
history -d $((HISTCMD-1)) && history -d <command or number of command>
history -d
elimina la entrada mencionada del historial.
HISTCMD
almacena el número_comando del comando que se ejecutará a continuación. Entonces, (HISTCMD-1) se refiere al último comando ejecutado.
Hice una película corta de bash que muestra cómo funciona: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2
Después de ejecutar el comando y debido a que también elimina el comando en sí mismo, subir con la flecha no mostrará el comando, por lo que si planea usarlo con frecuencia, sería mejor crear un alias:
alias hc='history -d $((HISTCMD-1)) && history -d $1'
Entonces puedes hacer:
$ hc command