Y at-il un moyen de capturer la sortie d'une commande et sa valeur de retour dans les variables dans un script shell?

StackOverflow https://stackoverflow.com/questions/1746273

  •  20-09-2019
  •  | 
  •  

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?

Était-ce utile?

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:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top