Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/04/2010, à 19:53

miniSeb

Terminal - Naviguer dans l'historique

Ç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 wink ).
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 wink ; ç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 wink

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 hmm (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 ? tongue

À 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 smile

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 !

Dernière modification par miniSeb (Le 26/04/2010, à 19:57)

Hors ligne

#2 Le 26/04/2010, à 20:07

ikthus

Re : Terminal - Naviguer dans l'historique

Merci sympa, j'ai appris qq truc, j'aime bien la commande !!

Sinon, tu peux améliorer la doc, c'est même vivement encouragé smile
http://doc.ubuntu-fr.org/wiki/participer_wiki

Salut Miniseb


Je ne serais jamais l'esclave de votre société - Assassin

Hors ligne

#3 Le 26/04/2010, à 21:59

miniSeb

Re : Terminal - Naviguer dans l'historique

De rien wink

C'est d'encore plus agréable quand on sait qu'on peut tout combiner. Du genre

~$ !-5:2-$:p

Mais bon, ok, ça devient vite le bordel dans les scripts lol

J'irai faire un passage dans la doc à l'occasion, alors !

Dernière modification par miniSeb (Le 26/04/2010, à 21:59)

Hors ligne

#4 Le 26/04/2010, à 22:32

nesthib

Re : Terminal - Naviguer dans l'historique

tuto très sympa miniSeb. À noter toutefois que ceci ne fonctionne que dans l'interpréteur de commandes mais pas avec un script.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 27/04/2010, à 06:30

miniSeb

Re : Terminal - Naviguer dans l'historique

Ok merci pour l'info smile
Je ne scripte jamais en bash (ou alors c'est minimal) et je n'avais pas essayé.

Bon à savoir !

Hors ligne

#6 Le 01/05/2010, à 12:51

kursus

Re : Terminal - Naviguer dans l'historique

Merci pour le tuto ! super utile cool

Hors ligne

#7 Le 10/05/2010, à 12:33

miniSeb

Re : Terminal - Naviguer dans l'historique

De rien big_smile

À noter : ça coince avec les accents dans les noms de fichier wink

~$ gnome-open fichier1
~$ !gn:0 fichié2
gnome-open fichié
Erreur à l'affichage de l'URL : Erreur de l'interrogation du fichier (...)

sad

Hors ligne