El mismo comando aparece en mi historial una y otra vez. ¿Cómo puedo evitar esto? Sé que es posible a través de, HISTCONTROL
pero no he encontrado el camino correcto.
El mismo comando aparece en mi historial una y otra vez. ¿Cómo puedo evitar esto? Sé que es posible a través de, HISTCONTROL
pero no he encontrado el camino correcto.
Respuestas:
Desde la bash
página del manual:
HISTCONTROL
Una lista de valores separados por dos puntos que controlan cómo se guardan los comandos en la lista del historial. Si la lista de valores incluye
ignorespace
, las líneas que comienzan con un carácter de espacio no se guardan en la lista del historial. Un valor deignoredups
hace que las líneas que coinciden con la entrada del historial anterior no se guarden. Un valor deignoreboth
es taquigrafía paraignorespace
yignoredups
. Un valor deerasedups
hace que todas las líneas anteriores que coincidan con la línea actual se eliminen de la lista del historial antes de guardar esa línea. Cualquier valor que no esté en la lista anterior se ignora. Si HISTCONTROL no está configurado o no incluye un valor válido, todas las líneas leídas por el analizador de shell se guardan en la lista del historial, sujetas al valor de HISTIGNORE. La segunda línea y las siguientes de un comando compuesto de varias líneas no se prueban y se agregan al historial independientemente del valor de HISTCONTROL.
Así que ponga la siguiente línea en su ~/.bashrc
:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_login
mayoría de las veces funcionaría si se modifica .bashrc, pero ese no es el caso todo el tiempo.
source ~/.bashrc && source ~/.bash_profile
Pegue esto en su ~/.bashrc
:
export HISTCONTROL=ignoredups
En su lugar, podría usar ignoreboth
. Esto es una abreviatura para ambos ignorespaces
(comandos que comienzan con espacios) y ignoredups
(duplicados).
Prefiero ignoredups
por sí solo, ya que encuentro el comportamiento predeterminado de ignorar comandos con espacios en el frente bastante molesto cuando copio un comando de un sitio web y no se guarda porque accidentalmente copié en un espacio también ... Pero para cada uno lo suyo
ignoredups
causa que las líneas que coinciden con la entrada del historial anterior no se guarden . Solo elimina líneas consecutivas idénticas.
Al poner esto, ~/.bashrc
se aplicará la solución de @ alvin en diferentes sesiones como wlell
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
export HISTCONTROL
y el tuyo no? ¿Cual es la diferencia? Está funcionando para mí sin exportación, solo tengo curiosidad
export
la variable está disponible para subprocesos. stackoverflow.com/q/1158091/552621 En el caso de HISTCONTROL
, PROMPT_COMMAND
etc., estas variables son utilizadas por el propio shell, por lo que tal vez no sea necesario exportarlas (a procesos secundarios).
export HISTCONTROL=erasedups
Grabar unívocamente cada nuevo comando es complicado. Primero necesita agregar
~/.profile
o similar:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Entonces necesitas agregar a ~/.bash_logout
:
history -a
history -w