Comment arrêter bash de modifier l'historique lorsque je réutilise et modifie une entrée?

20

Certaines instances de bash modifient l'historique des commandes lorsque vous réutilisez et modifiez une commande précédente, d'autres ne le font apparemment pas. J'ai cherché et cherché, mais je ne trouve rien qui indique comment empêcher les commandes de l'historique d'être modifiées lorsqu'elles sont réutilisées et modifiées.

Il y a des questions comme celle-ci , mais cela semble dire comment faire face à l'histoire en cours d'édition. Je n'ai rencontré récemment qu'une instance de bash qui modifie l'historique lorsque vous réutilisez une commande - tous les shells bash précédents que j'ai utilisés ont (pour autant que je le remarque) été configurés pour ne pas modifier l'historique lorsque vous réutilisez et éditez une commande. (Peut-être que je n'ai pas prêté attention à mon histoire de coquille depuis environ 15 ans ...)

C'est donc probablement la meilleure question: PUIS-JE dire à bash de ne JAMAIS modifier l'historique - et si oui, comment?

Richard Wiseman
la source
Vous pouvez utiliser history -ppour effectuer des extensions d'historique sans affecter le fichier d'historique. Vous pouvez faire history -sde même et ajouter à l'historique sans exécution. Vous pouvez faire HISTIGNORE='start of a command I never want in history.*:command2.*'pour garder certaines commandes hors de l'historique.
mikeserv
1
Est -ce pas set revert-all-at-newline ondans la question que vous liez à résoudre votre problème? Pouvez-vous montrer comment reproduire le problème? Notez que vous pouvez également utiliser zshpour un comportement plus en ligne avec ce que vous voulez.
Stéphane Chazelas
@mikeserv En regardant la page de manuel, history -pest-ce que je devrais faire pour chaque commande que je veux réutiliser - est-ce vrai? Si c'est le cas, ce n'est pas tout à fait ce que je recherche. Comme je l'ai mentionné, j'ai utilisé des instances de bash qui ne modifient jamais l'historique lorsqu'une commande est réutilisée et modifiée.
Richard Wiseman
@ StéphaneChazelas Non, je ne pense pas que ce revert-all-at-newlinesoit exactement ce dont j'ai besoin. Si je modifie une commande et appuie sur CTRL-C pour l'annuler, je ne veux pas non plus que cela affecte l'historique. Je n'ai jamais eu à configurer bash pour ne pas modifier l'historique, ce qui explique en partie pourquoi je me demande parfois pourquoi une nouvelle installation se comporte d'une manière et parfois de l'autre. Soit dit en passant, sur une instance qui ne modifie pas l'historique lors de la réutilisation des commandes, un bind -V | grep revertindique qu'il revert-all-at-newlineest défini sur «off».
Richard Wiseman
2
En fait, cela a très peu à voir avec bash. Tout est question de readline. Il existe différentes implémentations de la readlinebibliothèque, et elle a également son propre ensemble de paramètres (BEAUCOUP d'entre eux) et son propre fichier de configuration. Je ne sais pas exactement s'il s'agit d'un paramètre ou simplement d'une différence d'implémentation, mais vous devriez rechercher dans la documentation liée à readline, pas bash.
orion

Réponses:

9

Il s'avère que revert-all-at-newlinec'est la réponse. Je devais l'inclure set revert-all-at-newline ondans mon ~/.inputrcfichier, car l'utilisation de la setcommande à l'invite bash n'avait aucun effet. (Ensuite, bien sûr, j'ai dû lancer un nouveau shell.)

En outre, j'ai trouvé qu'il ~/.inputrcest chargé au lieu de /etc/inputrc s'il est présent, ce qui signifie que les valeurs par défaut définies dans ce dernier ne sont plus actives lorsque vous créez ~/.inputrc. Pour résoudre ce problème, commencez ~/.inputrcpar $include /etc/inputrc.

Merci à @ StéphaneChazelas de m'avoir pointé dans la bonne direction.

Richard Wiseman
la source
0

Dans ~ / .bashrc, vous pouvez ajouter

shopt -s histappend
Jeff Coleman
la source
Merci, mais cela n'a aucun effet sur le problème que je rencontre. Je viens de vérifier et histappendest activé, mais mon historique affiche toujours des modifications des commandes précédentes.
Richard Wiseman
J'ai cherché dans la page de manuel de bash et j'ai trouvé les règles pour l'historique d'édition Noms des commandes de lecture en ligne C'est assez descriptif mais je ne vois pas d'option pour ce que vous voulez, sauf peut-être: redraw-current-line Actualiser le courant ligne.
Jeff Coleman
Il existe également une option de retour à la nouvelle ligne qui est désactivée par défaut
Jeff Coleman