Aide mémoire Bash

Quelques éléments de Bash que j’utilise de temps à autre mais que parfois j’oublie. Cet article ne remplacera jamais le manuel de Bash.

Bash possède beaucoup d’éléments intéressants, beaucoup sont méconnus.

La lecture de son manuel est fastidieuse mais très intéressante. Cet article n’a pas vocation à le remplacer, juste à noter les éléments que je suis susceptible d’utiliser de temps à autre.

Pour mes notes sur les commandes générales, dirigez-vous plutôt vers cet article :

Aide mémoire Shell

Variables magiques

$* : Tous les arguments passés au script ou à la fonction. Attention, c’est piégeux s’il y a des espaces dans les arguments. Préférer la forme "$@"

$? : Code de retour de la dernière commande.

$! : PID de la commande / du script.

$@ : Tous les arguments. Utiliser sous la forme "$@". Cela conservera correctement les args, même s’il y a un espace dedans.

$0 : Nom de la fonction, ou du script.

$# : Nombre d’arguments de la fonction, du script.

$$ : PID du shell courant.

$_ : Expansion du dernier argument de la dernière commande.

Exemple :

mkdir pouet/foo/bar
cd $_

touch pouet/foo/bar/fichier.txt
vim $_

Interactif

Ctrl + t pour échanger de position 2 caractères ; celui sous le curseur avec le précédent.

Ctrl + x puis Ctrl + e : ouvrir l’éditeur (utilise la variable $EDITOR), et à la sortie, exécuter la commande puis supprimer le fichier temporaire.

Gestion des Jobs

Ctrl + z : stoppe un job et l’envoie en arrière plan

jobs : Renvoie la liste des jobs en arrière plan avec le statut un ID et parfois un tag :

[1]+  Stopped                 man bash
[2]   Stopped                 python
[3]-  Stopped                 vim

fg [id] : ramène le job [id] au premier plan. Si non spécifié, le dernier passé en arrière plan est ramené. Il est possible d’écrire %<id> (qui est un alias de fg <id>).

%+ et %- peuvent aussi être utilisés, et relanceront le job indiqué par ce caractère (dans la liste des jobs).

Remarque : ce tag change de job en fonction de l’ordre de pause / relance des jobs.

Tester des flux réseau

/dev/tcp/nom ou IP/port ou /dev/udp/nom ou IP/port. Article dédié ici.

Un peu plus ?

J’ai aussi des notes diverses à cet endroit.

Elles parlent notamment de substitution de variables, des descripteurs de fichiers, …

Il me faudrait les mettre au propre sur de site un jour, mais elles peuvent néanmoins être utiles.