Exécution de commandes avec ssh et script shell à l'aide de variables sur une machine distante

8

Je voudrais exécuter une commande et un script situés sur une machine distante avec un script sur une machine locale. Je sais qu'il est possible d'exécuter ce genre de commandes avec ssh, j'ai donc fait:

#!/bin/bash
ssh username@target 'cd locationOf/theScript/; ./myScript.sh'

Cela fonctionne parfaitement. J'aimerais que ce script soit plus générique, utilisant des variables. C'est maintenant:

#!/bin/bash
LOCATION=locationOf/theScript/
EXEC=myScript.sh
ssh username@target 'cd ${LOCATION}; ./${EXEC}'

Et je reçois cette erreur: bash: ./: is a directory

Je suppose que la machine distante ne connaît pas ces variables. Existe-t-il un moyen de les exporter vers la cible?

Jean-Baptiste Martin
la source

Réponses:

7

Je ne connais pas un moyen facile d'exporter des variables d'environnement vers la cible, mais votre script pourrait fonctionner si vous le remplacez 'par ". Avec 's, la chaîne 'cd ${LOCATION}; ./${EXEC}'est passée textuellement, mais avec

ssh username@target "cd ${LOCATION}; ./${EXEC}"

la substitution des variables se fait localement.

Notez que les valeurs de LOCATIONet EXECsont transmises au shell distant, donc cela ne fonctionne que si elles ne contiennent aucun caractère spécial du shell.

isido
la source