GNU/Linux >> Tutoriels Linux >  >> Linux

Comment désactiver la modification de mon historique dans bash

Je parviens en quelque sorte à affecter la commande d'origine, c'est-à-dire que ma modification remplace la commande d'origine dans l'historique.

Droit. Si vous revenez dans votre historique et modifiez la ligne sans en appuyant sur retour pour exécuter la commande mais au lieu de passer à une autre entrée de l'historique, vous venez de modifier l'entrée de l'historique. Si vous listez ensuite votre historique, vous verrez un * sur la ligne indiquant que vous l'avez modifié. Je trouve cette "fonctionnalité" extrêmement frustrante. D'autres ont fourni de bons exemples sur la façon de reproduire cela.

Mon objectif est d'éviter cela, afin que toute modification d'une commande précédente soit toujours ajoutée à l'historique et ne remplace jamais l'original.

Moi aussi j'ai voulu le désactiver. J'ai trouvé la solution via cette réponse sur unix.stackexchange.

Pour résumer, vous devez activer le revert-all-at-newline paramètre readline qui est désactivé par défaut. Si le paramètre est activé, bash annulera toutes les modifications que vous avez apportées à votre historique lorsque vous exécuterez la commande suivante.

Pour activer ce paramètre dans votre shell, vous devez ajouter ce qui suit à votre ~/.inputrc fichier puis redémarrez votre shell :

$include /etc/inputrc
set revert-all-at-newline on

La première ligne est nécessaire car je suppose que si vous fournissez votre propre .inputrc déposer le /etc/inputrc par défaut le fichier n'est pas inclus, ce qui n'est probablement pas ce que vous voulez.


Si vous revenez à une commande précédente et que vous la modifiez, mais que vous ne l'exécutez PAS (au lieu d'utiliser les commandes d'historique pour accéder à une autre commande et l'exécuter), les modifications resteront dans votre liste d'historique.

En appuyant sur Ctrl + C , après édition, contrecarre ce comportement. Il laisse la commande d'origine intacte, c'est-à-dire qu'il annule la mémorisation des modifications apportées à l'original.


Voici ma propre réponse, veuillez corriger ou fournir plus de détails si vous le pouvez.

Lorsque l'option "vi" est définie dans bash ("set -o vi" -- "Utiliser une interface d'édition de ligne de commande de style vi"), il existe deux modes d'édition d'une commande à partir de l'historique.

Le premier mode (appelons-le "de base") est lorsque vous commencez à éditer immédiatement en utilisant les touches de retour arrière, de suppression et de caractère.

L'autre mode est le "mode vi", entré lorsque vous appuyez sur Esc.

Si vous souhaitez conserver votre historique intact, N'UTILISEZ PAS les deux modes dans la même édition. Je ne sais pas exactement comment fonctionne bash, mais vous pouvez y penser de cette façon :

  1. L'entrée en "mode vi" applique toutes les modifications apportées en "mode de base" à la commande d'origine et crée une copie de la commande que vous pouvez modifier davantage à l'aide des commandes de style vi.
  2. Les modifications sont appliquées lorsque vous appuyez sur Entrée (exécuter), Haut, Bas ou j,k (passer à une autre commande dans l'historique).
  3. Les modifications ne sont pas appliquées si vous appuyez sur Ctrl-C.
  4. L'utilisation SEULE de l'édition de base ou de style vi n'affecte pas la commande d'origine dans l'historique.

Linux
  1. Comment utiliser les commandes d'historique de Bash

  2. Comment faire en sorte que la saisie anticipée s'applique à la recherche dans l'historique de Bash (ctrl-r) ?

  3. Comment désactiver un alias dans Bash pour une seule commande ? ?

  4. CentOS / RHEL :Comment désactiver l'historique du shell BASH

  5. Comment :Historique Bash/shell illimité ?

Comment désactiver SElinux sur CentOS 7

Comment activer l'horodatage dans la sortie de la commande d'historique Linux

Commande d'historique sous Linux (historique de bash)

Comment afficher l'historique de Bash sans numéros de ligne

Comment activer l'horodatage dans l'historique de Bash sous Linux

Comment supprimer une commande de l'historique sous Linux