Bash отображает одинарные кавычки, чтобы показать команду, которая является допустимым синтаксисом ввода. Это не выполнение команды, которая содержит эти одинарные кавычки в параметре ssh
команды.
ssh … '"sudo' /home/pi/shared/blink.sh 27 'off"'
говорит вам , что последние 4 параметров команды SSH являются "sudo
, /home/pi/shared/blink.sh
, 27
и off"
.
На удаленном хосте демон ssh объединяет слова команд с пробелами в качестве разделителей, поэтому выполняемая вами удаленная команда
"sudo /home/pi/shared/blink.sh 27 off"
Это пытается выполнить команду с именем sudo /home/pi/shared/blink.sh 27 off
, которое, конечно, не существует.
Удалите двойные кавычки из вашего определения testvar
.
Здесь это не имеет значения, но, вероятно, это имеет значение в вашем реальном случае: вместо ${testvar}
, напишите "$testvar"
(или, "${testvar}"
если хотите, но фигурные скобки необязательны). Всегда ставьте двойные кавычки вокруг переменных замен, если вы не знаете, почему вам нужно их пропустить. "$testvar"
расширяется до значения переменной testvar
, тогда как, $testvar
если не заключать в двойные кавычки, обрабатывает значение testvar
как разделенный пробелами список шаблонов глобуса.
Жиль "ТАК - перестань быть злым"
источник
Оболочка разбивает значение переменной на слова. Сделайте двойную кавычку, чтобы предотвратить расщепление. Увидеть разницу:
источник