El mismo comando aparece en mi historial una y otra vez. ¿Cómo puedo evitar esto? Sé que es posible a través de, HISTCONTROLpero 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, HISTCONTROLpero no he encontrado el camino correcto.
Respuestas:
Desde la bashpá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 deignoredupshace que las líneas que coinciden con la entrada del historial anterior no se guarden. Un valor deignorebothes taquigrafía paraignorespaceyignoredups. Un valor deerasedupshace 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_loginmayorí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 ignoredupspor 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
ignoredupscausa 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, ~/.bashrcse 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 HISTCONTROLy el tuyo no? ¿Cual es la diferencia? Está funcionando para mí sin exportación, solo tengo curiosidad
exportla variable está disponible para subprocesos. stackoverflow.com/q/1158091/552621 En el caso de HISTCONTROL, PROMPT_COMMANDetc., 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
~/.profileo similar:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Entonces necesitas agregar a ~/.bash_logout:
history -a
history -w