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 ssh
Befehls 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
, 27
und 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 off
natü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 $testvar
nicht in doppelten Anführungszeichen testvar
als durch Leerzeichen getrennte Liste von Glob-Mustern behandelt wird.
Gilles 'SO - hör auf böse zu sein'
quelle
Shell teilt den Wert der Variablen in Wörter auf. Doppelte Anführungszeichen, um das Teilen zu verhindern. Sieh den Unterschied:
quelle