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 :
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 !.
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 :
!-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.
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.
!$ :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.