2009-11-17 6 views
0

Donc, disons que j'ai une commande, foo, dans un script qui a à la fois une valeur de retour, et une chaîne de sortie qui m'intéresse, et je veux les stocker dans une variable (enfin au moins sa sortie pour la variable, et sa valeur de retour pourrait être utilisée pour un conditionnel).Existe-t-il un moyen de capturer la sortie d'une commande, et sa valeur de retour dans les variables dans un script shell?

Par exemple:

a=$(`foo`) # this stores the output of "foo" 
if foo; then # this uses the return value 
    stuff... 
fi 

La meilleure chose que je pouvais penser à capturer cette sortie est d'utiliser un fichier temporaire:

if foo > $tmpfile; then 
    a=$(`cat $tmpfile`) 
    stuff... 
fi 

Y at-il de toute façon je pourrais simplifier cela?

Répondre

4

cela?

out=$(cmd) 
rv=$? 
if test $rv -eq 0; then 
    echo "all good" 
    echo $out 
else 
    echo "wtf, exit code was $rv" 
fi 

BTW, $() et des backticks sont deux syntaxes pour le même effet, ce qui signifie que vous que voulez écrire

$(`foo`) 

si foo délivre un texte d'une commande que vous voulez exécuter à nouveau. comme:

foo() 
{ 
    echo echo date 
} 
$(foo) 
$(`foo`) 
+0

Ouais, tu as raison de la chose accents graves. Je ne suis pas sûr de savoir pourquoi j'ai mis ceux là. – supercheetah

+0

merci par le chemin – supercheetah

3
output=`foo` 
echo "Return: $?" # $? is the return code 
Questions connexes