J'utilise plusieurs terminaux Konsole. Et je veux que toutes les commandes que je tape dans chaque terminal soient enregistrées dans l'historique des commandes, de sorte que la prochaine konsole que j'ouvrirai aura toutes. Pour empêcher chaque terminal d'écraser l'historique des commandes de l'autre terminal, j'ai donné les paramètres suivants dans mon.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
J'ai donné la dernière ligne pour voir le numéro de commande dans mon invite. La commande no. n'a jamais dépassé 600, mais certaines de mes anciennes commandes disparaissent encore de l'histoire. Il existe de nombreuses commandes qui sont données à plusieurs reprises, mais comme prévu ignoredups
, cela n'augmente jamais la commande no in prompt. Pourtant, les anciennes commandes disparaissent toujours et le nombre de commandes dans l'histoire reste toujours légèrement supérieur à 500.
Le .bash_history
fichier contient encore beaucoup de doublons malgré les ignorés.
PS: Les sorties d'écho $HISTSIZE
et $HISTFILESIZE
sont à la fois=1000
Mise à jour: J'ai trouvé le problème dans l'entrée ci-dessus pour .bashrc
. Il suffit d' appeler history -a
à PROMPT_COMMAND
concatène simplement la dernière nouvelle commande au .bash_history. Donc, ignoredups
et erasedups
n'ont aucun effet.
Existe-t-il un moyen, je peux toujours écrire dans le .bash_history sans doublons de chaque terminal? Je ne veux pas charger tout l'historique à chaque invite de commande history -r
et le réécrire history -w
, car les commandes que j'ai émises dans un terminal apparaîtront également dans un autre terminal parallèle. Je veux que les commandes combinées n'apparaissent que dans un nouveau terminal.
Le casse-tête, pourquoi mon histoire était réduite à 500, est résolu. J'ai remarqué que cela arrivait chaque fois que je ssh dans cette machine. La création d'un .bash_profile
avec l'entrée suivante a résolu ce problème.
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Maintenant, mon .bashrc est exécuté à chaque fois que je ssh aussi. Et la taille du fichier historique augmente désormais de façon monotone.
la source
bug-bash
liste de diffusion un an après la publication de cette question: lists.gnu.org/archive/html/bug-bash/2013-07/msg00092.htmlRéponses:
J'ai conclu qu'il n'est pas possible d'ajouter les nouvelles commandes directement et en même temps pour supprimer les doublons. Ma solution consiste donc à exécuter les commandes suivantes de temps en temps. ou pour le mettre dans ma crontab.
La commande ci-dessus conservera la dernière occurrence d'une commande et supprimera toutes les autres répétitions au-dessus d'elle du fichier historique sans gâcher l'ordre.
la source
Il est laid, et je suis sûr que
sed
ouawk
serait mieux, mais j'ai essayé de résoudre le même problème en ajoutant dans mon.bashrc
:Cela créera un fichier d'historique séparé pour chaque terminal que vous ouvrez, cependant si vous exécutez bash dans bash, il utilisera le même historique, mais ne devrait pas écraser. Je vais vous avertir avec une mise en garde de mon expérience. Bien que cela fonctionne et empêche l'historique d'être écrasé, vous devez
grep
plusieurs fichiers pour essayer de trouver l'historique que vous recherchez, ce qui peut parfois prendre du temps.la source