Bash recèle d'astuces pour vous faire gagner du temps et vous rendre la vie plus facile. En voici quelques-unes (parmi bien d'autres).
Ré-exécuter des commandes
Bash propose plusieurs techniques pour vous éviter de devoir ré-écrire une commande déjà saisie conservée dans l'historique :
!! : ré-exécute la dernière commande!42 : ré-exécute la commande en position 42 dans l'historique (la commande history permet d'afficher l'historique)!foo : ré-exécute la dernière commande commençant par foo (merci à Snake23)^foo^bar : ré-exécute la dernière commande en remplaçant foo par barctrl-r : lance une recherche dans l'historique des commandes : tapez simplement le début d'une commande pour la retrouver facilement
Mode Emacs ou Vi ?
Pour ne pas faire de jaloux, Bash possède deux modes correspondant aux deux éditeurs de texte bien connus, permettant de bénéficier de certains de leurs raccourcis clavier. En faisant "set -o vi" ou "set -o emacs" (le mode emacs est en fait activé par défaut), on définit le mode à utiliser.
Cela permet alors d'utiliser quelques combinaisons de touches bien pratiques :
en mode Emacs :
Ctrl-k : (comme kill) pour couper le texte du curseur jusqu'à la fin de la ligneCtrl-u : pour couper le texte du curseur jusqu'au début de la ligneCtrl-y : (comme yank) pour le collerMeta-y : (soit Alt-y sur de nombreux claviers) pour effectuer une rotation entre les différentes valeurs du "kill-ring" (presse-papier de GNU readline)Ctrl-x Ctrl-u : annuler le dernier changement à la ligne en cours
Un éditeur pour les longues lignes
Pénible n'est-ce pas d'éditer des commandes qui font plusieurs lignes ? Il faut ajouter des \ à chaque fin de ligne, on ne peut pas remonter éditer ce qu'on a écrit à la ligne précédente, bref, on aimerait mieux faire ça dans un bon éditeur de texte.
Évidemment si je dis ça c'est que Bash le permet : un petit Ctrl-x-e et votre éditeur préféré (définit dans $VISUAL ou $EDITOR) se lance, vous permettant de saisir votre commande. Sauvegardez, quittez, et votre commande se lance.
CDPATH
Vous connaissez sans-doute déjà PATH, la variable qui contient les chemins dans lesquels Bash vas chercher les exécutables correspondant aux commandes que vous tapez, mais connaissez vous CDPATH, son pendant pour les dossiers dans lesquels vous voulez vous rendre avec cd ?
CDPATH vous permet de définir où la commande cd va chercher le dossier dont vous saisissez le nom. Par défaut elle cherche dans le dossier en cours, mais vous pouvez par exemple y ajouter votre homedir ou la racine pour accéder rapidement aux dossiers qu'ils contiennent. Il vous suffit pour cela de définir la valeur de CDPATH à CDPATH=.:~:/ (à faire dans votre ~/.bashrc pour rendre le changement permanent) et cd mondossier ira d'abord chercher "mondossier" dans le répertoire courant (.), puis dans votre homedir (~) et enfin à la racine (/).
Attention, cette astuce peut vite devenir agaçante, notamment lorsqu'on utilise l'auto-complétion et que Bash vous propose des tas de dossiers qui ne sont pas dans le dossier en cours.
Notez que cette astuce fonctionne aussi avec Zsh.
Options pratiques
Les options suivantes s'activent avec shopt -s nom_de_l_option. À mettre dans son .bashrc pour rendre les changements permanents.
Certaines de ces options sont pour Bash 4 ou supérieur uniquement. Pour connaître votre version de Bash : bash --version.
Globbing récursif (Bash 4)
Les utilisateurs de Zsh connaissent déjà le globbing récursif. Késako ? Et bien, de la même façon que, par exemple, ls /home/*/FooBar listera tous les fichiers FooBar se trouvant dans les répertoires directement situés dans /home (grâce au globbing, qui remplace "*" par les noms de fichier), avec le globbing récursif, ls /home/**/FooBar listera tous les fichiers FooBar se trouvant dans les répertoires directement situés dans /home ainsi que dans leurs sous-répertoires (et sous-sous-répertoires etc).
Les utilisateurs de Bash n'ont plus à être jaloux, le globbing récursif est dispo depuis Bash 4 et s'active grâce à l'option globstar (shopt -s globstar).
Autocd (Bash 4)
Fatigué de devoir taper cd devant chaque nom de dossier dans lequel vous souhaitez vous rendre ? Alors activez autocd (shopt -s autocd) et vous n'avez-plus qu'à taper le nom du dossier dans lequel vous souhaitez vous rendre pour y aller !
dirspell/cdspell
Corrige les erreurs dans les noms de dossiers (seulement si en argument de cd pour cdspell) si elles ne font pas plus d'une lettre. Pour ceux qui ont des gros doigts boudinés
.
Pour en faire plus
RTFM, évidemment !












Excellent la recherche dans l'historique ! Idem pour la réexécution de la dernière commande ou la commande n ! Classieux !
Une autre astuce concernant l'historique...
!motclé
permet d'exécuter la dernière commande tapée commençant par "keyword"...
hum...commençant par "motclé" vous l'aurez compris...
Merci pour celle-ci. Ajoutée à la liste.
Merci ! Je vais devenir accro du globbing recursif pour faire des recherches du style : ls **/*.gif
Merci pour l'article, un bon résumé
En passant, tu as oublié de mettre tes "li" dans des "ul"
C'est corrigé... Rassures-moi, tu vérifies pas le code HTML de toutes les pages que tu visites ?
Pour CDPATH, cette astuce ne fonctionne pas sous ZSH, puisqu'elle y est intégrée en natif ^^'
Une autre petite astuce...
Si vous tapez chonw alors que vous vouliez taper la commande chown, il vous suffit de faire la combinaison CTRL+T pour que bash rectifie votre erreur et réécrive la bonne commande chown.
Cela fonctionne bien sûr avec les autres commandes, par exemple mkdri deviendra mkdir après un CTRL+T.
Apparemment, cette astuce ne fonctionne que pour les deux dernières lettres de la commande erronée. Il suffit d'ailleurs de refaire la combinaison de touches CTRL+T pour revenir en arrière et retrouver la commande mal orthographiée...
Il est peut-être possible de configurer le nombre de lettres d'une commande erronée que bash peut corriger avec cette combinaison de touches. Si quelqu'un connait la solution, je suis preneur...
Pour l'historique il y a aussi :
!?motclé
qui permet de lancer la derniere commande qui contient motclé.
vi dans le bash, quel soulagement...
Un grand merci !
Poster un nouveau commentaire