shell Historique du shell


Mécanisme de l'historique.

Nous utilisons couramment la complétion de commande (TAB), d'une part par paresse, d'autre part pour nous éviter l' effort mnémotechnique de se rappeler les commandes en entier : il suffit de connaître leur début.

Nous utilisons également l'historique du shell avec les touches fléchées ou C-p et C-n (en mode emacs -- mieux que les flèches de direction car les doigts bougent moins !) pour réutiliser une commande précédente.

Bash peut garder en mémoire un nombre n de commandes passées. Vous pouvez paramétrer ce nombre en modifiant la variable
export HISTSIZE=n
dans votre .bash_profile.

Je me sers souvent de deux astuces qui exploitent les possibilités de l'historique de bash :


  1. Réutilisation du dernier argument de la commande précédente.

    Supposons que vous ayez téléchargé un fichier foo.tgz dans votre répertoire personnel.
    Vous voulez le déplacer dans le répertoire /usr/local/src, décompresser l'archive dans le nouveau répertoire, supprimer foo.tgz et revenir à votre répertoire initial.
    mv foo.tgz /usr/local/src
    cd !$
    tar xvzf foo.tgz
    rm !$
    cd -

    Vous l'avez compris, !$ se réfère au dernier argument (chaîne) de la commande précédente !.

  2. Boucle dans l'historique.

    Supposons que l'on mette au point un fichier foo.tex. Il nous faut retaper un cycle de 3 commandes plusieurs fois avant de visualiser les modifications sur le fichier ps final :

    1. latex foo.tex
    2. dvps -o foo.ps foo.dvi
    3. gv -scale 2 -noresize foo.ps
    Il suffit de taper ces trois commandes une seule fois, puis ensuite simplement pour lancer l'opération suivante, de taper toujours :

    !-3
    En effet, !-n correspond à la n-ième dernière commande dans l'historique. Sur notre exemple, la première fois que l'on tape !-3, c'est la commande latex qui est exécutée. La deuxième fois, ce sera dvps , la troisième gv, et ensuite de nouveau latex etc...

    Remarque : si vous devez souvent exécuter les mêmes commandes à plusieurs jours d'intervalle, il est plus efficace de définir un Makefile et d'utiliser la commande make.

  3. Sécurité

    Une autre utilisation de !$, vous utilisez souvent les jokers, mais vous voulez voir comment ils sont remplacés avant de commettre une erreur irréparable :

    ls *[0-9].ps
    rm -f !$

    La première commande vous affiche les fichiers correspondant, et après avoir vérifié que c'étaient bien ceux que vous voulez supprimer, !$ vous évite de retaper votre expression à jokers.

  4. Pour afficher sans exécuter la dernière commande
  5. !$ :p
    Le modificateur :p après n'importe quelle commande d'historique permet d'afficher la commande sans l'exécuter. Si cette commande vous satisfait, il suffit pour l'exécuter de taper

    !!
    qui exécute la dernière commande de l'historique.
    Par exemple, pour rechercher dans l'historique une commande qui contient l'expression poly :

    !?poly?!:p
    !!

    Si vous avez sous bash les raccourcis emacs, le plus simple pour effectuer la même action consiste à utiliser la recherche arrière dans l'historique :

    C-r
    où la combinaison de touches Ctrl + r effectue une recherche arrière (reverse-search) et affiche les commandes correspondant au mofif que vous pouvez introduire interactivement.


Il existe un nombre impressionnant de possibilités avec la commande d'historique !. A vous de les découvrir...
Retour
Bash Index Soyeur
Alain Soyeur
Last modified: Mon Sep 27 12:44:41 CEST 1999