Quelques astuces bash
Geek
Par djib le dimanche 4 décembre 2005, 01:29 - Lien permanent
bash c'est un shell. En pratique c'est ce que vous voyez lorsque vous ouvrez une console. (Il existe d'autres shell mais bash est l'un des plus standards).
Voici quelques astuces vous permettant d'aller plus vite en tapant dans la console.
- Lorsque vous appuyez sur la touche tabulation de votre clavier alors que vous êtes en train de taper un nom de fichier ou de commande, bash le complétera (auto-complétion).
- Lorsque vous appuyez sur la touche haut, vous remontez dans l'historique des dernières commandes que vous avez tapées.
- bash interprète le symbole
!!comme la dernière commande (arguments compris) ayant été exécutée. C'est TRÈS pratique, surtout lorsque vous avez oubliésudodevant une commande qui le requiert ! Exemple :$ apt-get install eclipse- Réponse :
E: Impossible d'ouvrir le fichier verrou /var/lib/apt/lists/lock - open (13 Permission non accordée) E: Impossible de verrouiller le répertoire de liste $ sudo !!
- bash interprète les symboles
!^et!$comme respectivement le premier et le dernier argument de la commande précédente. En pratique je trouve que!$est le plus souvent utilisé. Exemple :$ mkdir toto$ cd !^ou$ cd !$
- Plus généralement vous pouvez préciser à bash quel argument utiliser avec
!:2par exemple, mais j'avoue ne jamais utiliser ça... - bash vous simplifie aussi la vie avec
{et}qui vous permettent d'éviter de recopier certaines parties de la ligne de commande.- Comparez :
$ cp documents/programmes/HelloWorld.java documents/programmes/HelloWorld.java.backup - avec :
$ cp documents/programmes/{HelloWorld.java,HelloWorld.java.backup} - ou même :
$ cp documents/programmes/HelloWorld.java{,.backup}
- Comparez :
Un petit détail très pratique. Par défaut lorsque vous tapez un des symboles ci-dessus, bash effectue direcement la commande lorsque vous tapez entrée... Pourquoi pas demander à bash une petite confirmation ? Ouvrez votre fichier .bashrc dans votre home et ajoutez : shopt -s histverify à la toute fin de ce ficher. Évitez ainsi les grosses erreurs en vérifiant ce que bash va faire !
Bon voilà, c'est tout ce à quoi je pense pour l'instant. J'espère vous permettre de gagner quelques secondes à chaque commande. Si vous avez de la patience, man bash vous donnera 4181 lignes d'explications et d'astuces...
N'hésitez pas à faire part de vos astuces bash dans les commentaire !!!
Mise-à-jour le 4 décembre 2005
Comme l'a fait remarqué szdavid dans les commentaires : les alias sont aussi très partique. Les alias vous permettent de réaliser une commande complexe avec un nom plus simple que vous aurez choisi. Si vous ouvrez votre fichier .bashrc vous verrez :
# some more ls aliases #alias ll='ls -l' #alias la='ls -A' #alias l='ls -CF'
Les # introduisent des commentaires. Si vous enlevez le # au début des trois dernières lignes, taper ll en console fera la même chose que ls -l.
Vous pouvez aussi créer des alias du même nom que la commande comme par exemple : alias rm='rm -i'. Maintenant vous ne supprimerez plus de fichiers par erreur.
Notez que pour des commandes très complexes, vous préfèrerez peut-être un script bash qui n'est autre qu'une succession de commandes bash stoquées dans un fichier exécutable. Pour pouvoir exécuter facilement ce fichier, mettez le dans votre PATH ou alors faites un alias vers ce fichier !
Mise-à-jour le 6 janvier 2006
J'ai oublié une astuces très très pratique c'est cd - qui permet de revenir au dossier précédent.



Commentaires
Merci pour ces super astuces ; je vais essayer...

Peut être pourrais tu parler des alias qui sont, ils faut bien le reconnaitre, très pratiques
Petite question subsidiaire : comment sait on ce que remplace {}, dans le deuxième exemple ?
On dirait quil y a une erreur dans cet exemple:
Exemple :
* $ mkdir toto
* $ cd !^ ou $ cd !$
cd !^ va donner "cd mkdir" ?
Ben non!
Il est marque que !^ est interprete comme le premier argument de la commande precedente. Le seul et unique argument de la commande precedente est "toto" (dans le cas que tu cites).
mkdir n'est pas un argument, mais la commande elle-meme
Bonjour et merci à vous, szdavid, Skateinmars et Iceman.
Pour ce qui est de mon exemple avec !$ et !^ il est effectivement peut-être mal choisi, mais ils remplacent bien les *arguments*. Pour accéder à la commande je ne connais pas plus court que !:0
Sinon je vais effectivement rajouter une note sur les alias, merci.
Pour ce qui est des {}, les trois commandes donneront exactement le même résultat. Dans le cas de {,.backup} (notez la virgule) il ajoute .backup à la fin du fichier...
j'utilise aussi "!" pour rappeler les commandes qui commencent par "une chaîne" :
ex : j'ai un fichier ~/temp/test. Imaginons que je sois a) pas réveillé / b) dans ~/.
$ more test
test: Aucun fichier ou répertoire de ce type
$ cd temp
$ !m
more test
Salut les gens
Salut kNo'.
Très sympathique.
Cela rappelle la commande le l'historique la plus récente qui commence par cette lettre. Bravo !!! Encore des précieuses secondes de gagnées.
Notez que vous pouvez aussi taper 'history' en console puis '!' suivi du numéro de la commande à rappeler.
Voila les raccourcis que j'utilise tout le temps.
La recherche dans l'historique: Ctrl-R
On tape Ctrl-R, quelques lettres, qui peuvent être en plein milieu, d'une commande qu'on a déjà tapée, on voit le résultat s'affiner au cours de la frappe, on passe d'un résultat à l'autre avec Ctrl-R et Ctrl-S . Idéal pour ne jamais taper deux fois la même chose.
Laisser tomber une ligne en cours de frappe: Ctrl-C .
Pour pouvoir utiliser Ctrl-droite et Ctrl-gauche pour passer d'un mot à l'autre, ajouter à /etc/inputrc ou à ~/.inputrc ces lignes:
"\e[5C": forward-word
"\e[5D": backward-word
La même chose avec Ctrl-suppr (je n'ai pas réussi à faire marcher Ctrl-efface):
"\e[3;5~": kill-word
Voir plus haut sans quitter le clavier: Maj-pageHaut (et Maj-pageBas)
Ouahou ! Merci pour l'astuce de la recherche !!! C'est fantastique ça !!! B-)
Sinon chez moi le ctrl+gauche ou ctrl+droite se déplace de mot en mot sans avoir besoin de changer quoi que ce soit dans la conf... C'est peut-être particulier à Konsole... ou alors c'est que j'ai pas bien compris de quoi tu parlais.
je crois pas que ça ai été cité mais moi j'utilise aussi beaucoup le Ctrl+U pour effacer la ligne de commande en cours de rédaction quand je me rend compte que j'ai tapé nimp'
et aussi j'aime bien le Ctrl+L pour nettoyer le shell
enfin, le classique Ctrl+D pour fermer le term
Merci pour ces astuces badock.
Ctrl+C peut servir à remplacer Ctrl+U.