O Bash está exibindo aspas simples para mostrar um comando que é uma sintaxe de entrada válida. Não está executando um comando que contém essas aspas simples em um parâmetro para o ssh
comando.
ssh … '"sudo' /home/pi/shared/blink.sh 27 'off"'
diz que os últimos 4 parâmetros do comando ssh são "sudo
, /home/pi/shared/blink.sh
, 27
e off"
.
No host remoto, o daemon ssh une as palavras dos comandos com espaços como separadores; portanto, o comando remoto que você está executando é
"sudo /home/pi/shared/blink.sh 27 off"
Isso tenta executar um comando cujo nome é sudo /home/pi/shared/blink.sh 27 off
, o que obviamente não existe.
Remova as aspas duplas da sua definição de testvar
.
Não importa aqui, mas provavelmente importa no seu caso real: em vez de ${testvar}
, escreva "$testvar"
(ou "${testvar}"
se você quiser, mas o aparelho é opcional). Sempre coloque aspas duplas em torno das substituições de variáveis, a menos que você saiba por que precisa deixá-las de fora. "$testvar"
expande para o valor da variável testvar
, enquanto que $testvar
quando não está entre aspas duplas trata o valor testvar
como uma lista de padrões glob separados por espaços em branco.
Gilles 'SO- parar de ser mau'
fonte
O Shell divide o valor da variável em palavras. Cite duas vezes para evitar a divisão. Veja a diferença:
fonte