Comment renvoyer la valeur d’une variable spécifique à partir d’un script shell?

J’ai deux fichiers sh, qui sont “main.sh” et “sub.sh” Je veux retourner la valeur d’une variable dans “sub.sh” et l’utiliser dans main.sh. Il y a tellement de commandes “echo” donc je ne peux pas simplement renvoyer la valeur du fichier sub.sh. Je n’ai besoin que d’ une valeur de variable. Comment cela peut-il être possible?

main.sh

echo "start" //how to get a variable from the sh below? //dene=$(/root/sub.sh) echo "finish" 

sub.sh

 echo "sub function" a="get me out of there" // i want to return that variable from script echo "12345" echo "kdsjfkjs" 

Pour “envoyer” la variable, procédez comme suit:

 echo MAGIC: $a 

Pour le “recevoir”:

 dene=$(./sub.sh | sed -n 's/^MAGIC: //p') 

Cela permet de supprimer toutes les lignes qui ne commencent pas par MAGIC: et d’imprimer la partie après ce jeton lorsqu’une correspondance est trouvée. Vous pouvez remplacer votre mot spécial par MAGIC.

Edit: ou vous pouvez le faire en “source” le sous-script. C’est:

 source sub.sh dene=$a 

Cela permet d’exécuter sub.sh dans le contexte de main.sh , comme si le texte était simplement copié-collé directement. Vous pouvez ensuite accéder aux variables, etc.

main.sh

 #!/bin/sh echo "start" # Optionally > /dev/null to suppress output of script source /root/sub.sh # Check if variable a is defined and contains sth. and print it if it does if [ -n "${a}" ]; then # Do whatever you want with a at this point echo $a fi echo "finish" 

sub.sh

 #!/bin/sh echo "sub function" a="get me out of there" echo "12345" echo -e "kdsjfkjs" exit 42 

Vous pouvez exporter une variable vers une session shell dans sub.sh et la récupérer plus tard dans main.sh.

 sub.sh #!/usr/bin/sh export VARIABLE="BLABLABLA" main.sh #!/bin/sh . ./sub.sh echo $VARIABLE