GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo excluir el comando de la lista de historial, pero mantenerlo en el historial "en vivo"?

Mientras tanto, logré mantener mi historial mucho más limpio gracias a los excelentes consejos de ustedes sobre HISTIGNORE opción en .bashrc , omitiendo todos esos ll sin sentido o df -k líneas.

Sin embargo, también he aprendido que HISTIGNORE la opción es muy restrictiva , también.
Por ejemplo, si tiene una línea como esta (simplificada)

HISTIGNORE='ll*:la*:cd*'

no solo conseguirás que estos queden fuera de la lista , sino también de su "historial en vivo" como me gustaría doblar el historial volátil, puede acceder a través de Cursor hacia arriba /Cursor abajo . Pruébelo:se omitirán por completo ahora, sin importar cuánto tiempo recorra su historial de comandos con dichas teclas de cursor.

Sin embargo, a veces hago necesito estas líneas, especialmente con rutas muy largas y complicadas que no quiero volver a escribir. Por otro lado, me gustaría tener estas líneas exclusivas a mi historial en vivo y no tenerlos almacenados en la lista de historial ya que cambiarán con frecuencia.

¿Hay alguna manera de lograr esto?

Como otra nota al margen, descubrí que, por alguna razón, el historial "en vivo" y la lista de historial a veces diferirían mucho (cf. ¿Por qué obtengo resultados diferentes con el mismo usuario y el comando de historial).

Respuesta aceptada:

Puedes usar HISTIGNORE variable de entorno.

Una lista de patrones separados por dos puntos que se utiliza para decidir qué líneas de comando deben guardarse en la lista de historial. Por ejemplo:

export HISTIGNORE="cd*:ls*"

esto ignorará todos los comandos cd y ls del historial.

EDITAR:

lo siento, en mi primera lectura no le di suficiente atención a tu pregunta. Por cierto, tienes razón:HISTIGNORE es una configuración muy difícil, y bash_history simplemente ignorará cada comando que se enumera en esta variable (lo ignorará en el momento en que lo ejecute, si ya hay entradas con estos comandos en su HISTFILE se encontrarán mediante la búsqueda inversa del historial.

Para responder primero a su última pregunta, el historial en vivo y escrito puede variar mucho si usa diferentes terminales simultáneamente. Puede probar una solución como se describe aquí:

Conservar el historial de bash en múltiples ventanas de terminal

Lo que podría imaginar es una solución en la que usa una función en su ~/.bash_logout archivo, que borrará las entradas del historial que no desee.

algo como esto debería hacer lo que quieras:

 function clear_history(){
    # hist_ignore regex, this may be done in a more fancy way, 
    # such as using an env variable, but anyway
    MYHISTIGNORE='^cd:^view:^cat'

    # write down history to file
    history -w

    # create a new tmp file for history
    tmpFile=$(mktemp)
    cp ${HISTFILE}  ${tmpFile}

    # use it to filter history
    for myRegex in $(echo $MYHISTIGNORE | awk 'BEGIN{FS=":"}{for (i=1;i<=NF;i++){print $i}}'); do 
       sed -i "/${myRegex}/d" ${tmpFile}
    done

    # and copy it back to history file
    mv ${tmpFile} ${HISTFILE}
}

Linux
  1. Cómo usar el comando de historial en Linux

  2. Cómo borrar un comando específico del historial de Bash en Linux

  3. Cómo enumerar los módulos cargados o habilitados en PHP desde la línea de comandos

  4. Cómo excluir un directorio en find. dominio

  5. ¿Cómo recuerdo un comando específico del historial de comandos, sin ejecutarlo?

Cómo usar el comando de historial de Linux

Cómo usar el comando SS de Linux

Cómo ver eventos significativos en la historia mundial desde la línea de comandos

Cómo quitar un comando del historial en Linux

Cómo enumerar discos en Linux

Cómo enumerar solo directorios en Linux