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.
#!/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"
#!/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