Y at-il un moyen de capturer la sortie d'une commande et sa valeur de retour dans les variables dans un script shell?
Question
Alors, disons que j'ai une commande, foo
, dans un script qui a à la fois une valeur de retour, et une chaîne de sortie que je suis intéressé, et je veux stocker les dans une variable (bien au moins son sortie de la variable et sa valeur de retour peut être utilisée pour un conditionnel).
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?
La solution
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 uniquement voulez écrire
$(`foo`)
si foo
émet un texte d'une commande que vous souhaitez exécuter à nouveau. comme:
foo()
{
echo echo date
}
$(foo)
$(`foo`)
Autres conseils
output=`foo`
echo "Return: $?" # $? is the return code
De bash: (notez la première $ dans la première colonne est mon message)
$ A=$(echo abc; false); echo status:$? A:$A
status:1 A:abc
Ne pas utiliser $()
plus de contre-apostrophes, comme celle ayant effectué la commande et exécute ensuite sa sortie.
Voir aussi: