Bash zeigt einfache Anführungszeichen an, um einen Befehl mit gültiger Eingabesyntax anzuzeigen. Es wird kein Befehl ausgeführt, der diese einfachen Anführungszeichen in einem Parameter des sshBefehls enthält.
ssh … '"sudo' /home/pi/shared/blink.sh 27 'off"'
Ihnen sagt, dass die letzten vier Parameter des ssh - Befehl sind "sudo, /home/pi/shared/blink.sh, 27und off".
Auf dem Remote-Host fügt der ssh-Daemon die Wörter der Befehle mit Leerzeichen als Trennzeichen zusammen, sodass der von Ihnen ausgeführte Remote-Befehl lautet
"sudo /home/pi/shared/blink.sh 27 off"
Damit wird versucht, einen Befehl auszuführen, dessen Name sudo /home/pi/shared/blink.sh 27 offnatürlich nicht existiert.
Entfernen Sie die doppelten Anführungszeichen aus Ihrer Definition von testvar.
Hier spielt es keine Rolle, aber in Ihrem konkreten Fall spielt es wahrscheinlich eine Rolle: ${testvar}Schreiben Sie stattdessen "$testvar"(oder "${testvar}"wenn Sie möchten, aber die geschweiften Klammern sind optional). Setzen Sie Variablenersetzungen immer in doppelte Anführungszeichen, es sei denn, Sie wissen, warum Sie sie weglassen müssen. "$testvar"Wird auf den Wert der Variablen erweitert testvar, während der Wert von $testvarnicht in doppelten Anführungszeichen testvarals durch Leerzeichen getrennte Liste von Glob-Mustern behandelt wird.