Récupérer une variable d'un sous shell en bash

Marc Chantreux khatar at phear.org
Fri Dec 4 18:21:59 CET 2015


hello,

> comment remonter mon code de sortie au shell parent ?

excellente formulation! du coup la lecture d'un document expliquant le
fonctionnement des processus unix te donnera la réponse: tu ne peux
simplement pas. 

Il faut donc utiliser un socket unix ou internet, un fichier ou
n'importe quel autre mecanisme qui permettent aux process de s'échanger
de l'info. 


> Si oui, je cherche un moyen de récupérer le code de sortie d'une commande que je fais tourner en arrière plan.  

comment peux-tu avoir un code de retour d'un truc qui tourne a moins de lire dans le futur ? 

> J'ai essayé 
>   $commande && exit $? &  

oula ...  reprennons:

    commande;
    exit $?

et 

    commande;

font la meme chose (parceque le shell renvoie la valeur de la
derniere expression evaluée (soit $?)). idem pour les fonctions

    foo () { commande; return $?  }

et 

    foo () { commande }

mais donc... que renvoie une expression qui passe une commande
en bg ? 

    foo () { return 5 }
    foo
    perl -E'sleep 1; exit 10'& 
    echo $?  # 0 donc $? veut juste dire que & a marché
    foo
    wait
    echo $?  # 0 ... donc $? veut dire que wait a bien fonctionné

dans zsh tu as le $pipe_status mais j'ai jamais utilisé.

donc le plus simple a mon avis est de passer par des fichiers

pstatus=$( mktemp -d ~/process-status-$(date +%F_%X_%s_XXXX ))
{ montruc --avec --plein de parametres
    <<< $? > $pstatus/montruc } &

du coup tu peux voir si le process est fini dans ton script

test -f $pstatus/montruc && echo "job done" 

et comme c'est dans des fichiers, tu peux facilement surveille l'état
d'avancement des jobs meme apres avoir quitté ton script.

cordialement,

-- 
Marc Chantreux (eiro on github and freenode)
http://eiro.github.com/
http://eiro.github.com/atom.xml
"Don't believe everything you read on the Internet"
    -- Abraham Lincoln


More information about the Shell mailing list