7.5. Code de retour d’une commande lancée en arrière-plan

Il n’existe pas de mécanisme direct pour récupérer le code de retour d’une commande exécutée de manière asynchrone. Une méthode permettant de l’obtenir consiste à utiliser le paramètre spécial ! (à ne pas confondre avec le mot-clé ! présenté ci-dessus) et la commande interne wait.

Le paramètre spécial ! contient le numéro d’identification (pid) de la dernière commande exécutée en arrière-plan.

La commande interne wait munie d’un pid ou d’un numéro de job attend la fin du processus correspondant et place le code de retour de ce dernier dans le paramètre spécial ?.

$ grep bert tutu & wait $!		=> (a)
[1] 6427
grep: tutu: Aucun fichier ou dossier de ce type
[1]+  Termine 2                  grep --color=auto bert tutu
$ 
$ echo $?				=> (b)
2
$

Le shell lance la commande grep bert tutu en arrière-plan et attend qu'elle se termine (a), puis affiche son code de retour (b).

Dans l'exemple ci-dessous, deux commandes (a) et (b) sont lancées en arrière-plan. Il est possible de connaître le code de retour d'une de ces deux commandes (ici, il s'agit de la commande (a)) en indiquant à wait le pid de cette commande (ici, 12669). Le code de retour de cette commande est égal à 2.

$ ( sleep 40 ; grep bert tutu ) &         	=> (a)
[1] 12669 
$ (sleep 30 ; grep sanchis pass ) &        	=> (b)   
[2] 12671 
$ wait 12669 
sanchis:x:103:100::/home/sanchis:/bin/bash 
grep: tutu: Aucun fichier ou dossier de ce type 
[1]-  Termine 2               ( sleep 40; grep bert tutu ) 
[2]+  Fini                    ( sleep 30; grep sanchis pass ) 
$ echo $? 
2 
$