web-dev-qa-db-fra.com

Comment terminer automatiquement une commande à partir de l'historique des commandes?

Existe-t-il une combinaison de touches permettant à bash de concurrencer automatiquement une commande de l'historique? Dans ipython et matlab par exemple, ceci est réalisé en appuyant sur la flèche vers le haut après avoir tapé quelques caractères.

21
Sparkler

Tout d'abord, frapper tab dans bash est encore mieux car il complète automatiquement tous les exécutables de votre PATH, qu'ils soient dans l'historique ou non. Cela dit, il existe différentes façons d'obtenir une commande à partir de votre historique:

  1. Utilisez son numéro. Si vous savez que la commande que vous voulez était il y a 3 commandes, vous pouvez simplement exécuter

    !-3
    

    Cela réexécutera la commande que vous avez exécutée il y a trois commandes.

  2. Recherche le. Type Ctrlr et commencez à taper n'importe quel texte. La première commande de l'historique qui correspond à votre texte sera affichée et frappera enter l'exécutera.

  3. Frappé  (flèche vers le haut). Cela fera apparaître la dernière commande, appuyez à nouveau dessus et vous remonterez l'historique de vos commandes. Lorsque vous trouvez celui que vous voulez, appuyez sur enter.

  4. Ajoutez ces lignes à votre ~/.inputrc (créez le fichier s'il n'existe pas):

    "\e[A": history-search-backward
    "\e[B": history-search-forward
    

    Maintenant, tapez les premiers caractères de l'une des commandes que vous avez précédemment exécutées et appuyez sur . La première commande de votre historique commençant par ces caractères sera affichée. Frappé  à nouveau pour voir le reste et frapper enter quand vous avez trouvé celui que vous voulez.

  5. Utilisez la commande history. Comme @Isaac l'a expliqué, cela répertoriera toutes les commandes stockées dans votre fichier d'historique.

30
terdon

Vous pouvez vérifier la position de la commande sur la séquence d'historique avec la commande history. Ensuite, vous pouvez exécuter !<number_in_the_sequence>. J'espère que ça aide.

8
Isaac

Vous pouvez également utiliser history et diriger la sortie pour une commande spécifique.

Par exemple, si vous avez été cd- tout autour du système de fichiers toute la journée et que vous avez juste besoin d'un rappel des répertoires sur lesquels vous avez travaillé

history | grep cd

Vous pouvez alors soit copier/coller la commande, soit !n (où n est le numéro de ligne dans le fichier historique) pour le réexécuter.

2
Brian