More is less

01/09/2015

Linux shell history

Un jour, par mégarde, j'ai tapé dans un terminal Ctrl-r. Ce jour est béni des Dieux. Dans cet article quelques ficelles de bash_history :

- Ctr-r ou (reverse-i-history)

- Historique du bash, exécuter par numéro

- Zut ! j'ai encore oublié sudo

- Premier, dernier argument de la dernière commande

(reverse-i-history)

Taper Ctrl-r (Les touches [Ctrl] et [R] en même temps.). On obtient un nouveau prompt :

(reverse-i-search) `': 

Maintenant, si on tape git on va voir la dernière commande qu'on a tapé et qui commençait par git. Si on a tapé git pull on va voir la dernière commande qui commence par git pull.

(Je n'ai pas encore trouvé comment sortir de cette commande sans l'exécuter. Pour l'instant je fais Ctrl-c)

Une autre alternative est de taper !<cmd>, qui exécute la dernière commande commençant avec <cmd>. A manier avec précaution car si la dernière commande était rm -fr ../, il peut en résulter pas mal de dégats.

Exécuter une commande par son numéro

La commande pour afficher tout l'historique des commandes est history. On peut se limiter aux 12 dernières commandes :

$ history | tail -12

On obtient une sortie à l'écran des douze dernières commandes.

Supposons que dans l'historique récent on veuille exécuter à nouveau une commande. On tape !<n> (point d'exclamation suivi du numéro de la commande). Exemple :

...
1998  cp /usr/share/vim/vim74/syntax/git.vim ~/.vim/after/syntax/
1999  ls -a 
2000  vim .bashrc
2001  history | tail -12
$ !1998
cp /usr/share/vim/vim74/syntax/git.vim ~/.vim/after/syntax/
$

Ajouter à une commande la commande précédente

Combien de fois on tape apt install ... et apt pleure parce qu'il ne peut pas faire sauter un verrou. Il suffit dans ce cas de taper sudo !!. Les deux points d'exclamation seront remplacés par la commande qui a raté.

$ apt install libpoppler-glib-dev
E: Impossible d'ouvrir le fichier verrou /var/lib/dpkg/lock ...
E: et vas-y que je te pleure parce que t'as oublié sudo
$ sudo !!
sudo apt install libpoppler-glib-dev

Rappeler des arguments

On vient de faire cp /usr/share/vim/vim74/colors/delek.vim ~/.vim/colors/.

On voudrait voir le contenu de /usr/share/vim/vim74/colors/delek.vim

$ cp /usr/share/vim/vim74/colors/delek.vim ~/.vim/colors/
$ view !^
view /usr/share/vim/vim74/colors/delek.vim ~/.vim/colors/

view reçoit pour argument le premier argument de la commande précédente

Si on avait voulu plutôt éditer le fichier qu'on vient de copier :

$ cp /usr/share/vim/vim74/colors/delek.vim ~/.vim/colors/
$ vim !$
vim ~/.vim/colors/

La commande vim !$ reçoit cette fois le deuxième argument qui est ~/.vim/colors/

Plus fort encore :

$ cp array.cpp culs.cc jeu.cpp main.cpp  ../tmpcode
$ ..
$ vim !cp:3
vim jeu.cpp

La commande vim !cp:3 va exécuter vim avec comme argument le troisième argument de la dernière commande cp.

Autres commodités

Lisez la page man history.

Aller au debut


Réalisé avec Qlam - LGPL