Ça fait quelque temps que je cherchais un tutoriel sur l'exploitation de l'historique dans le terminal, mais je ne trouvais rien de probant. J'ai donc creusé de mon côté, par essai/erreur et avec des bribes d'informations sur différents sites.
Ne sachant si j'ai l'autorisation de modifier la doc (
http://doc.ubuntu-fr.org/terminal#l_historique_des_commandes ), je préfère écrire ça ici.
1. Comme signalé en doc, il est assez simple de naviguer dans l'historique en remontant avec la ↑ (flèche vers le haut) jusqu'à sélectionner la commande désirée.
2. On y signale également la possibilité de checker l'historique (les 500 dernières commandes) avec la commande
history.
L'utilisation de
!<num>, où
<num> correspond à sa place dans la liste, permet de la re-sélectionner. Ceci fonctionne également avec des chiffres négatifs
!-<num> donnera la
-nième commande (
!-1 vaut donc la dernière commande).
C'est ici que les Romains s'empoignent : la documentation n'apporte pas plus d'information. Toutefois, il existe beaucoup de moyens d'exploiter la commande
! (point d'exclamation) (à noter que, ci-après, les résultats des commandes sont supprimés, ils ne servent à rien à la compréhension 😉 ).
En effet, on retrouve tout d'abord la commande
!! qui permet de sélectionner automatiquement la dernière commande effectuée, comme suit :
~$ ls -al Documents/
~$ !!
ls -al Documents/
Jusque là rien de révolutionnaire 😉 ; ça va plus vite avec ↑.
Ça devient un peu plus intéressant lorsque l'on sait qu'en tapant la(es) première(s) lettre(s) de la commande voulue, on l'obtient également. Ainsi, on peut utiliser
~$ cd
~$ ls
~$ cd
tout comme
~$ cd
~$ ls
~$ !c
indifféremment, pour le même résultat.
Toujours rien de folichon, je vous l'accorde 😉
Nouvelle possibilité avec
!* qui permet de reprendre les arguments de la dernière commande, sans la reprendre. Ceci peut être utile, comme par exemple ici :
~$ cd ~/Documents/
~/Documents$ ls !*
ls ~/Documents/
Encore et toujours rien de très neuf :/ (mais bon, autant être complet hein !).
Il est également de récupérer une commande avec un élément de chaîne, avec l'opérateur :
!?chaine?
Avec un petit exemple :
~$ ls /Documents/
~$ cat file.txt
~$ !?ocu?
ls /Documents/
Un peu mieux ? :lol:
Dernière découverte, qui m'a donné envie d'écrire ce petit tutoriel : il est possible de réutiliser chaque section d'une commande, en fonction de sa position, grâce à
!:<num> :
~$ ls -al ~/Documents/
~$ !:0
ls
~$ ls -al ~/Documents/
~$ !:1
-al
~$ ls -al ~/Documents/
~$ !:2
~/Documents/
C'est-y pas beau tout ça ? 😛
À noter que les éléments fonctionnent comme dans une liste Perl : le 1er argument est l'élément 0. Par ailleurs, on peut utiliser
!:<num> et
!!:<num> indifféremment (je n'ai rien trouvé en tout cas...).
Il est possible de combiner plusieurs éléments, avec :
~$ ls -al ~/Documents/
~$ !:0-1
ls -al
Et, enfin, on peut remarquer que
!:0 correspond au 1er élément et que
!:$ correspond au dernier.
Alors, évidemment, avec les commandes en exemple ça ne sert strictement à rien (ou presque), mais avec des commandes plus longues ça permet un gain de temps considérable 🙂
Enfin, il me reste l'opérateur
p à présenter. Il permet d'imprimer (
print) la commande que l'on obtiendrait, sans l'effectuer. Ça permet d'éviter des erreurs de manipulation. Pour l'utiliser :
~$ ls -al ~/Documents/
~$ cp file1 file2
~$ !l:p
ls -al ~/Documents/
L'opérateur
p est également combinable avec
!:<num>.
PS : J'espère que ça n'est pas de la redite, mais comme je n'ai rien trouvé, j'en doute ;-)
En espérant que ça serve !