Por alguna razón, no puedo hacer que mi sistema mantenga mi historial de BASH después de un reinicio. Aquí están las secciones relevantes de mi ~/.bashrc
:
shopt -s histappend
PROMPT_COMMAND='history -a; updateWindowTitle'
export HISTCONTROL=ignoredups
export HISTSIZE=9999
export HISTFILESIZE=999999
export HISTFILE="$HOME/.bash_history"
Por lo que puedo decir, esas son todas las opciones necesarias ( sé que solía poder mantener el historial en varios reinicios sin todo esto en el pasado). Sin embargo, a pesar de haber agregado estas opciones hace varios reinicios, todavía pierdo la mayor parte de mi historial después de un reinicio. No está vacío, pero no tiene las 9999 líneas que tenía antes de reiniciar.
Antes de que nadie se queje, sí, he leído estas preguntas. He implementado algunas de sus sugerencias como se mencionó anteriormente, el resto no fueron útiles o no relevantes:
- Pérdida de historial de Bash cuando se usa histappend
- ¿Cómo evitar que Bash altere el historial?
- ¿Qué determina lo que aparece en el comando bash history?
- ¿Cómo mantengo mi historial de bash en las sesiones?
- guardar el historial de bash regularmente
En el caso de que pueda haber otros comandos relevantes allí, puede ver mi entero ~/.bashrc
aquí .
Entonces, ¿qué me estoy perdiendo? ¿Por qué no se guarda mi historia? Si alguien piensa que otro archivo puede ser relevante, hágamelo saber y lo publicaré. Lo comprobé ejecutando grep -i hist \.*
mi $HOME
que mostró que el único .
archivo relevante que contiene la cadena hist
o HIST
era .bashrc
.
Estoy ejecutando Linux Mint Debian Edition, GNU bash, versión 4.2.36 (1) -release (x86_64-pc-linux-gnu) y mi emulador de terminal favorito (en caso de que sea relevante) es terminator
.
ACTUALIZAR:
Siguiendo la sugerencia de @ mpy en los comentarios, cambié mi ~/.bashrc
configuración para establecerla HISTFILE=~/bash_history
en lugar de la predeterminada ~/.bash_history
y eso parece resolver el problema de los shells interactivos . Los shells de inicio de sesión todavía muestran el mismo comportamiento, con el historial truncado en las 500
líneas. Sin embargo, no hay HIST
variables relacionadas establecidas en los archivos relevantes:
$ for f in /etc/profile ~/.profile ~/.bash_profile ~/.bash_login; do \
echo -ne "$f :"; echo `grep HIST $f`; \
done
/etc/profile :
/home/terdon/.profile :grep: /home/terdon/.profile: No such file or directory
/home/terdon/.bash_profile :grep: /home/terdon/.bash_profile: No such file or directory
/home/terdon/.bash_login :grep: /home/terdon/.bash_login: No such file or directory
$ grep -r HIST /etc/profile.d/ <-- returns nothing
Entonces, ¿por qué la configuración HISTSIZE
y HISTFILESIZE
en el ~/.bashrc
no es suficiente a menos que establezca explícitamente $HISTFILE
algo diferente al predeterminado ~/.bash_history
?
history
comando, ¿la salida que ve es idéntica a la que ve, en ejecución cat .bash_history
, además de los números de línea? Quiero decir, ¿el history
comando muestra marcas de tiempo u otra información? La razón por la que le pregunto es que si ve estas cosas esotéricas, significa que hay otro módulo / función / programa, que está interfiriendo con el historial de shell y una versión incorrecta o defectuosa de lo que sea, podría estar causándole dolor. .
;)
: pruebe con otro archivo como HISTFILE, no el predeterminado ~/.bash_history
. Explicación muy construida: supongo que bash es su shell predeterminado, por lo que al iniciar el sistema, un shell no interactivo es el padre de su sesión X (también supongo que usa X), que no sabrá nada sobre la opción histappend (ya que .bashrc es solo leer por shells interactivos), por lo tanto, mientras este shell padre se ejecute todo está bien, pero al finalizar (es decir, detener el sistema) se anulará ~/.bash_history
(que es el valor predeterminado) y desordenará su historial ...