utilisation de la variable ssh dans le script shell

Je veux utiliser les variables de ssh dans le script shell. Je suppose que j’ai une variable dont la valeur est dans le ssh et que maintenant je veux utiliser cette variable en dehors du ssh dans le shell lui-même, comment puis-je le faire?

ssh my_pc2 <<EOF  a=$(ls -lrt | wc -l) echo \$a EOF echo $a 

Dans l’exemple ci-dessus, le premier écho imprimé 10 à l’intérieur de ssh imprime 10 mais le second écho $ a n’imprime rien.

J’affinerais la dernière réponse en définissant une syntaxe spéciale pour renvoyer les parameters requirejs, par exemple ” #SET var=value

Nous pourrions mettre les commandes (que nous voulons exécuter dans la session ssh) dans un fichier cmdFile comme ceci:

 a=`id` b=`pwd` echo "#SET a='$a'" echo "#SET b='$b'" 

Et le script principal ressemblerait à ceci:

 #!/bin/bash # SSH, run the remote commands, and filter anything they passed back to us ssh user@host vars.$$ # Source the variable settings that were passed back . vars.$$ rm -f vars.$$ # Now we have the variables set echo "a = $a" echo "b = $b" 

Si vous faites cela pour beaucoup de variables, vous pouvez append une fonction à cmdFile, pour simplifier / encapsuler votre syntaxe spéciale pour renvoyer des données:

 passvar() { var=$1 val=$2 val=${val:-${!var}} echo "#SET ${var}='${val}'" } a=`id` passvar a b=`pwd` passvar b 

Vous devrez peut-être jouer avec des guillemets lorsque les valeurs incluent des espaces.

Un script comme celui-ci pourrait être utilisé pour stocker toute la sortie de SSH dans une variable:

 #!/bin/bash VAR=$(ssh user@host << _EOF id _EOF) echo "VAR=$VAR" 

il produit la sortie:

 VAR=uid=1000(user) gid=1000(user) groups=1000(user),4(adm),10(wheel)