Yo uso múltiples terminales Konsole. Y quiero que todos los comandos que escribo en cada terminal se guarden en el historial de comandos, para que el próximo konsole que abra tenga todos ellos. Para evitar que cada terminal sobreescriba el historial de comandos de la otra terminal, proporcioné la siguiente configuración en mi.bashrc
# avoid duplicates and commands starting with space
export HISTCONTROL=ignoredups:erasedups:ignorespace
# append history entries..
shopt -s histappend
#My machine reboots without warning sometimes.Hence to save commands instantaneously.
export PROMPT_COMMAND="history -a"
export HISTSIZE=1000
PS1="\[\e[1;34m\]\! \[\e[0m\]"$PS1
Di la última línea para ver el número de comando en mi solicitud. El comando no. nunca ha superado los 600, pero aún algunos de mis viejos comandos están desapareciendo de la historia. Hay muchos comandos que se dan repetidamente, pero como era de esperar ignoredups
, nunca aumenta el comando no en el indicador. Sin embargo, los comandos antiguos aún están desapareciendo, y el número de comandos en el historial siempre permanece un poco más de 500.
El .bash_history
archivo todavía contiene muchos duplicados a pesar de las ignoraciones.
PD: La salida de echo $HISTSIZE
y $HISTFILESIZE
ambos son=1000
Actualización: Encontré el problema en la entrada anterior a .bashrc
. Sólo llamaba history -a
en PROMPT_COMMAND
simplemente añade el último nuevo comando a la .bash_history. Entonces el ignoredups
y erasedups
no tiene ningún efecto.
¿Hay alguna manera de que todavía pueda escribir en .bash_history sin duplicados desde cada terminal? No quiero cargar todo el historial en cada símbolo del sistema history -r
y volver a escribirlo de nuevo history -w
, porque los comandos que emití en un terminal también aparecerán en otro terminal en ejecución paralela. Quiero que los comandos combinados aparezcan solo en una nueva terminal.
El enigma, por qué mi historia se estaba recortando a 500 está resuelto. Me di cuenta de que sucedía cada vez que entraba en esta máquina. Crear un .bash_profile
con la siguiente entrada resolvió este problema.
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Ahora mi .bashrc se ejecuta cada vez que ssh también. Y el tamaño del archivo de historial ahora está aumentando monotónicamente.
fuente
bug-bash
lista de correo un año después de que se publicó esta pregunta: lists.gnu.org/archive/html/bug-bash/2013-07/msg00092.htmlRespuestas:
Llegué a la conclusión de que no es posible agregar los nuevos comandos directamente y, al mismo tiempo, eliminar los duplicados. Entonces, mi solución es ejecutar los siguientes comandos en un momento. o ponerlo en mi crontab.
El comando anterior mantendrá la última aparición de un comando y eliminará todas las repeticiones anteriores del archivo de historial sin estropear el orden.
fuente
Es feo, y estoy seguro de que
sed
oawk
sería mejor, pero trató de solucionar el mismo problema mediante la adición de esto en mi.bashrc
:Esto creará un archivo de historial separado para cada terminal que abra, sin embargo, si ejecuta bash dentro de bash, usará el mismo historial, pero no debería sobrescribirse. Te advertiré con una advertencia de mi experiencia. Si bien esto funciona y evita que se sobrescriba
grep
el historial, debe usar varios archivos para intentar encontrar el historial que está buscando, lo que a veces puede llevar mucho tiempo.fuente