Realmente disfruto usando control+r
para buscar recursivamente mi historial de comandos. He encontrado algunas buenas opciones que me gusta usar con él:
# ignore duplicate commands, ignore commands starting with a space
export HISTCONTROL=erasedups:ignorespace
# keep the last 5000 entries
export HISTSIZE=5000
# append to the history instead of overwriting (good for multiple connections)
shopt -s histappend
El único problema para mí es que erasedups
solo borra duplicados secuenciales, de modo que con esta cadena de comandos:
ls
cd ~
ls
Los ls
el comando en realidad se grabará dos veces. He pensado en ejecutar periódicamente con cron:
cat .bash_history | sort | uniq > temp.txt
mv temp.txt .bash_history
Esto lograría eliminar los duplicados, pero lamentablemente no se conservaría el orden. Si no sort
el archivo primero no creo uniq
puede funcionar correctamente.
¿Cómo puedo eliminar duplicados en mi .bash_history, conservando el orden?
Crédito adicional:
¿Hay algún problema al sobrescribir el .bash_history
? archivo a través de un script? Por ejemplo, si elimina un archivo de registro de apache, creo que necesita enviar una señal nohup/reset con kill
para que vacíe su conexión con el archivo. Si ese es el caso con .bash_history
archivo, tal vez de alguna manera podría usar ps
para verificar y asegurarse de que no haya sesiones conectadas antes de ejecutar el script de filtrado?
Respuesta aceptada:
Ordenar el historial
Este comando funciona como sort|uniq
, pero mantiene las líneas en su lugar
nl|sort -k 2|uniq -f 1|sort -n|cut -f 2
Básicamente, antepone a cada línea su número. Después de sort|uniq
-ing, todas las líneas se ordenan de nuevo según su orden original (utilizando el campo de número de línea) y el campo de número de línea se elimina de las líneas.
Esta solución tiene el defecto de que no está definido qué representante de una clase de líneas iguales lo hará en la salida y, por lo tanto, su posición en la salida final no está definida. Sin embargo, si se debe elegir el último representante, puede sort
la entrada por una segunda tecla:
nl|sort -k2 -k 1,1nr|uniq -f1|sort -n|cut -f2
Gestionar .bash_history
Para volver a leer y escribir el historial, puede usar history -a
y history -w
respectivamente.