web-dev-qa-db-fra.com

Comment stocker une sortie de script shell sur une variable sous Unix?

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}

40
logan

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.

74
Levon

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.

4
William Pursell

Supposons que vous vouliez stocker le résultat d'une commande echo

echo hello   
x=$(echo hello)  
echo "$x",world!  

sortie:

hello  
hello,world!
3
user3122919
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
2
gandalf007

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.

0