Bash affiche des guillemets simples afin d'afficher une commande qui est une syntaxe d'entrée valide. Il n'exécute pas une commande qui contient ces guillemets simples dans un paramètre de la ssh
commande.
ssh … '"sudo' /home/pi/shared/blink.sh 27 'off"'
vous dit que les 4 derniers paramètres de la commande ssh sont "sudo
, /home/pi/shared/blink.sh
, 27
et off"
.
Sur l'hôte distant, le démon ssh joint les mots des commandes avec des espaces comme séparateurs, de sorte que la commande à distance que vous exécutez est
"sudo /home/pi/shared/blink.sh 27 off"
Cela tente d'exécuter une commande dont le nom est sudo /home/pi/shared/blink.sh 27 off
, qui bien sûr n'existe pas.
Supprimez les guillemets doubles de votre définition de testvar
.
Cela n'a pas d'importance ici, mais cela a probablement de l'importance dans votre cas réel: au lieu de ${testvar}
, écrivez "$testvar"
(ou "${testvar}"
si vous voulez, mais les accolades sont facultatives). Mettez toujours des guillemets doubles autour des substitutions de variables, sauf si vous savez pourquoi vous devez les laisser de côté. "$testvar"
se développe à la valeur de la variable testvar
, alors que $testvar
lorsqu'il n'est pas entre guillemets traite la valeur de testvar
comme une liste de motifs glob séparés par des espaces.
Gilles 'SO- arrête d'être méchant'
la source
Shell divise la valeur de la variable en mots. Citez-le deux fois pour éviter le fractionnement. Regarde la différence:
la source