Se simplifier la vie sous Bash

Portrait de Zanko
Version imprimablePDF version

TerminalBash 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 bar
  • ctrl-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 ligne
  • Ctrl-u : pour couper le texte du curseur jusqu'au début de la ligne
  • Ctrl-y : (comme yank) pour le coller
  • Meta-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 Happy.

Pour en faire plus

RTFM, évidemment !

Portrait de Christophe

Excellent la recherche dans l'historique ! Idem pour la réexécution de la dernière commande ou la commande n ! Classieux !

Portrait de Snake23

Une autre astuce concernant l'historique...
!motclé
permet d'exécuter la dernière commande tapée commençant par "keyword"... Happy

Portrait de Snake23

hum...commençant par "motclé" vous l'aurez compris...

Portrait de Zanko

Merci pour celle-ci. Ajoutée à la liste.

Portrait de Dd

Merci ! Je vais devenir accro du globbing recursif pour faire des recherches du style : ls **/*.gif

Portrait de Jonas

Merci pour l'article, un bon résumé Eye-wink

En passant, tu as oublié de mettre tes "li" dans des "ul" Sticking out tongue

Portrait de Zanko

C'est corrigé... Rassures-moi, tu vérifies pas le code HTML de toutes les pages que tu visites ? Happy

Portrait de Ricard

Pour CDPATH, cette astuce ne fonctionne pas sous ZSH, puisqu'elle y est intégrée en natif ^^'

Portrait de popol29

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... Happy

Portrait de Lâche anonyme

Pour l'historique il y a aussi :
!?motclé
qui permet de lancer la derniere commande qui contient motclé.

Portrait de Grobh

vi dans le bash, quel soulagement...
Un grand merci !

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement.
  • Balises HTML autorisées : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • You can enable syntax highlighting of source code with the following tags: .
  • Les smileys textuels seront remplacés par des smileys graphiques.

Plus d'informations sur les options de formatage