Bash muestra comillas simples para mostrar un comando que es una sintaxis de entrada válida. No está ejecutando un comando que contiene estas comillas simples en un parámetro para el ssh
comando.
ssh … '"sudo' /home/pi/shared/blink.sh 27 'off"'
te dice que los últimos 4 parámetros del comando ssh son "sudo
, /home/pi/shared/blink.sh
, 27
y off"
.
En el host remoto, el demonio ssh une las palabras de los comandos con espacios como separadores, por lo que el comando remoto que está ejecutando es
"sudo /home/pi/shared/blink.sh 27 off"
Esto intenta ejecutar un comando cuyo nombre es sudo /home/pi/shared/blink.sh 27 off
, que por supuesto no existe.
Elimine las comillas dobles de su definición de testvar
.
Aquí no importa, pero probablemente importa en su caso real: en lugar de ${testvar}
escribir "$testvar"
(o "${testvar}"
si lo desea, pero los corchetes son opcionales). Siempre ponga comillas dobles alrededor de sustituciones variables a menos que sepa por qué necesita dejarlas fuera. "$testvar"
se expande al valor de la variable testvar
, mientras que $testvar
cuando no está entre comillas dobles trata el valor de testvar
como una lista separada por espacios en blanco de patrones globales.
Gilles 'SO- deja de ser malvado'
fuente
Shell divide el valor de la variable en palabras. Doble comilla para evitar la división. Ver la diferencia:
fuente