J'utilise intensément la ligne de commande, que ce soit sous OS X, FreeBSD ou Linux.
Au fil du temps, j'ai pris quelques habitudes d'utilisation que je partage aujourd'hui avec vous.
Pour naviguer dans la commande en cours d'écriture, taper les commandes suivantes permet :
- ctrl+A: D'aller au début de la ligne.
- ctrl+E: D'aller à la fin de la ligne.
- ctrl+B: De reculez d'un caractère.
- ctrl+F: D'avancer d'un caracère.
- esc+B: De reculer d'un mot.
- esc+F: D'avancer d'un mot.
- ctrl+U: De tout effacer du curseur jusqu'au début de la ligne.
- ctrl+K: De Tout effacer du curseur jusquà la fin de la ligne.
L'ajout des lignes suivantes dans votre fichier .inputrc
vous permettra de naviguer plus efficacement (à mon goût) dans votre historique :
"\e[A": history-search-backward
"\e[B": history-search-forward
Il vous suffira ensuite de taper les premières lettres de la commande que vous voulez récupérer dans votre historique et ensuite d'utiliser les flèches ↓ et ↑ de votre clavier pour la localiser précisément.
Les commandes suivantes, connues sous le nom de word designator
, sont également très pratiques pour manipuler les arguments d'une commande précédemment exécutée :
!:1… !:n
permettent de récupérer l'argument correspondant.!^
permet de récupérer le premier argument.!$
permet de récupérer le dernier argument.!:2-4
permet de récupérer du second au quatrième arguments (par exemple).
Il est également possible d'altérer le résultat des commandes précédentes, grâce aux modifiers
:
:h
permet d'extraire le répertoire correspondant à l'argument désigné par leword designator
, si ce dernier a la structure d'un chemin de fichier (par exemple!:2:h
).:t
permet d'extraire le nom du fichier correspondant à l'argument désigné par leword designator
, si ce dernier a la structure d'un chemin de fichier (par exemple!:3:t
).s/foo/bar
permet de remplacer la première occurence de la chaînefoo
parbar
dans l'argument désigné par leword designator
(par exemple!:3:s/foo/bar
).s/foo/bar/g
permet de remplacer toutes les occurences de la chaînefoo
parbar
dans l'argument désigné par leword designator
(par exemple!:3:s/foo/bar/g
).
Si vous utilisez les astuces précédentes, je vous recommande d'ajouter shopt -s histverify
à votre .bashrc
.
Ainsi, votre shell effectuera les substitutions demandées mais au lieu d'exécuter la commande obtenue, il vous l'affichera afin que vous puissiez la vérifier et éventuellement l'éditer.
Autre astuce toujours relative à l'utilisation de l'historique, !!
permet de récupérer la dernière commande exécutée.
En conséquence, elle est très utile lorsque vous exécutez une commande sans disposer des droits d'administration, pusiqu'un simple sudo !!
permet d'exécuter à nouveau la commande avec sudo
.
Ce sont les commandes que j'utilise le plus régulièrement pour manipuler mon historique, mais il en existe d'autres, très puissantes mais que je n'utilise que très rarement.
Pour plus d'informations à leur sujet, je vous invite à consulter l'excellente cheat sheet
de Peteris Krumins.
Une autre commande utile au quotidien mais qui n'est pas directement en rapport avec l'utilisation de l'historique est cd -
, qui permet de revenir dans le répertoire précédent après une utilisation de cd
.
Dans un tout autre registre, l'ajout des commandes suivantes dans votre fichier .bashrc
vous permettra d'avoir un prompt
sur deux lignes et en couleur, en fonction du fait que vous êtes connecté à un hôte distant via SSH et que vous disposez ou non des droits d'administration :
if [[ $SSH_CLIENT == '' ]]; then PS1GLOBALCOLOR="\[\033[0;36m\]" else PS1GLOBALCOLOR="\[\033[0;32m\]" fi if [[ $SUDO_USER != '' ]]; then PS1USERCOLOR="\[\033[0;31m\]" export PS1="\[\033]0;\u@\h:\w\007\]$PS1USERCOLOR\u$PS1GLOBALCOLOR@\h:\w\n$PS1GLOBALCOLOR\#>\[\033[0m\] " else PS1USERCOLOR=$PS1GLOBALCOLOR export PS1="\[\033]0;\u@\h:\w\007\]$PS1USERCOLOR\u$PS1GLOBALCOLOR@\h:\w\$(__git_ps1 \"(%s)\")\n$PS1GLOBALCOLOR\#>\[\033[0m\] " fi
Cerise sur le gâteau, il affiche également la branche active du dépôt Git dans lequel vous êtes.
Il faut cependant évidemment avoir chargé le fichier de complétion correspondant.
La commande shopt -s cdspell
permet quand à elle à votre shell de corriger automatiquement vos (petites) erreurs de frappe lorsque vous tapez un chemin de fichier.
6 réactions
1 De Matthieu Napoli - 12/08/2013, 16:21
Je suis récemment passé de bash à ZSH (et oh-my-zsh).
Ma productivité a explosée, notamment grace aux plugins : autocomplétion sur ce qui est déjà tapé, coloration syntaxique (utile pour voir direct une erreur dans la commande), autocomplétion sur plein de programmes (de git à composer en passant par scp), …
Suite à ces quelques semaines d'expérience, je ne regrette pas une seconde "history-search-backward" & autres de bash.
2 De annso - 12/08/2013, 16:39
Je reste sceptique sur certains raccourcis. Il y a des gens qui les utilisent vraiment ?
- Ctrl+B ou Ctrl+F quand les flèches gauches/droites suffisent ?
- Et je viens d'essayer esc+B et esc+F : non seulement je trouve ça galère à taper mais en plus on ne peut pas les cumuler (esc+B+B pour reculer de deux mots). Là encore Ctrl+ ← ou Ctrl+→ vient beaucoup plus naturellement pour moi
Tu devrais essayer zsh (et plus particulièrement oh-my-zsh), qui propose de base un certain nombre des fonctionnalités dont tu parle ici
- la fonctionnalité pour naviguer plus efficacement dans l'historique
- les branches git
- l'auto correction des fautes de frappes
et bien d'autre encore
L'essayer, c'est l'adoper !
3 De tshirtman - 12/08/2013, 16:46
Merci pour ctrl-b/f et alt-e/f je les oublie toujours, sinon, j'ajouterais ctrl-w (efface le mot précédant) et ctrl-y (colle ce qui a été coupé, par ctrl-u/k/w par exemple).
J'ajouterais aussi: ctrl-p et ctrl-n remplacent assez bien ↑ et ↓, quand a ctrl-r il permet d'initialiser la recherche dans l'historique.
(j'aime bien alt-. aussi, qui a le même effet que $!, mais le remplacement est fait instantanément, mais ça tords un peu les doigts sur un clavier azerty)
4 De piouPiouM - 15/08/2013, 18:36
Merci pour ces rappels bien utiles. Il manque cependant les combinaisons :
- Ctrl+W pour effacer le mot précédent.
- Ctrl+Y pour coller les derniers termes effacés (avec Ctrl+W, Ctrl+U, Ctrl+K)
- Ctrl+P et Ctrl+N pour naviguer dans l'historique des commandes (avant / après)
- Ctrl+L pour effacer l'écran et conserver la ligne en cours de saisie
5 De CDuv - 16/08/2013, 14:39
Similaire à
!!
il y a!*
qui ne reprends que les paramètres (pas la commande), très utile pour faire un vi sur un fichier après avoir fait un cat par exemple.6 De brayce - 28/08/2013, 10:33
Je ne vais parler que de Bash, mais pour moi, même si les docs le disent, Ctrl+W n'efface pas que le mot précédent : il efface jusqu'au premier espace précédent le curseur (donc jusqu'au début de l'argument de commande sur lequel est le curseur).
Si on a d'autres séparateurs de mots (: ou ~ par exemple, dans un commande ssh), je préfère alt+backspace.