Evita mantener el mando en la historia

33

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?
Luc M
fuente
Tenga en cuenta que si el objetivo es ocultar las contraseñas en los argumentos de la línea de comandos, aún serán visibles a través de ps
Benitok

Respuestas:

36

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.
cas
fuente
1
+1 para el truco espacial: D
petrus
19

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

Referencia

Michael Havas
fuente
7

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
cas
fuente
3

Podrías desarmar la HISTFILEvariable. 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.

Greg Hewgill
fuente
2

A veces hago

export HISTFILE=/dev/null
Rory
fuente
1

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.

HISTCMDalmacena 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
Itai Ganot
fuente