j'ai un script shell "script.sh" qui donne la sortie en tant que "succès" ou "échec" lorsque j'exécute dans la fenêtre unix. Maintenant, je veux stocker la sortie de script.sh dans une variable de commande unix. say $a = {output of script.sh}
Deux exemples simples pour capturer la sortie de la commande pwd
:
$ b=$(pwd)
$ echo $b
/home/user1
ou
$ a=`pwd`
$ echo $a
/home/user1
Le premier moyen est préféré. Notez qu'il ne peut y avoir d'espaces après le =
pour que cela fonctionne.
Exemple utilisant un script court:
#!/bin/bash
echo "hi there"
puis:
$ ./so.sh
hi there
$ a=$(so.sh)
$ echo $a
hi there
En général, une approche plus flexible consisterait à renvoyer une valeur de sortie de la commande et à l’utiliser pour un traitement ultérieur, bien que nous souhaitions parfois parfois capturer le résultat simple d’une commande.
Vous devriez probablement réécrire le script pour renvoyer une valeur plutôt que de la sortir. Au lieu de:
a=$( script.sh ) # Now a is a string, either "success" or "Failed"
case "$a" in
success) echo script succeeded;;
Failed) echo script failed;;
esac
vous seriez capable de faire:
if script.sh > /dev/null; then
echo script succeeded
else
echo script failed
fi
Il est beaucoup plus simple pour les autres programmes de travailler avec votre script s’ils ne doivent pas analyser le résultat. C'est un changement simple à faire. Juste exit 0
au lieu d’imprimer success
et exit 1
au lieu d’imprimer Failed
. Bien entendu, vous pouvez également imprimer ces valeurs ainsi que les quitter avec une valeur de retour raisonnable, de sorte que les scripts d'encapsulage disposent d'une flexibilité dans la manière dont ils fonctionnent avec le script.
Supposons que vous vouliez stocker le résultat d'une commande echo
echo hello
x=$(echo hello)
echo "$x",world!
sortie:
hello
hello,world!
export a=$(script.sh)
J'espère que cela t'aides. Notez qu'il n'y a pas d'espaces entre variable et =. Pour faire écho à la sortie
echo $a
Vous devez démarrer le script avec un point précédent, cela placera les variables exportées dans l'environnement actuel.
#!/bin/bash
...
export output="SUCCESS"
Puis exécute comme ça
chmod +x /tmp/test.sh
. /tmp/test.sh
Lorsque vous avez besoin de la totalité de la sortie et non d’une valeur unique, il suffit de la placer dans une variable comme l’indiquent les autres réponses.