Umgang mit Fehlern in expect, wenn rsync fehlschlägt
Bei der Verwendung von expect zur Ausführung von rsync können Fehler wie “Missing trailing-’ in remote-shell command. rsync error: syntax or usage error (code 1) at main.c(430) [sender=3.1.1]” auftreten. Dies erklärt die Ursache und Lösung für diesen Fehler.
Fehlerübersicht
Dies ist ein Fehler, den ich zwei Jahre lang ungelöst gelassen hatte, aber nach Recherchen fand ich eine Lösung. Wenn dieser Fehler auftritt, sehen Sie eine Nachricht wie diese:
Missing trailing-' in remote-shell command.
rsync error: syntax or usage error (code 1) at main.c(430) [sender=3.1.1]
Beispielcode, der den Fehler verursacht
Hier ist ein Beispiel für ein expect-Skript, das diesen Fehler erzeugt:
#!/usr/bin/expect -f
# exp_internal 1 ;# uncomment to turn on expect debugging
set timeout -1
spawn rsync -av -e 'ssh -p 10022 -i ~/.ssh/yuis.key' hoge.md [email protected]:~/yuis.xsrv.jp/public_html/_tmp
expect "Enter passphrase"
send "yourownpassword\n"
expect eof
Ursache
Die Ursache des Fehlers ist die Verwendung von einfachen Anführungszeichen im rsync-Befehl. Wenn einfache Anführungszeichen verwendet werden, kann rsync den Befehl möglicherweise nicht richtig interpretieren.
Referenzlinks:
Lösung
Durch Ändern der einfachen Anführungszeichen in doppelte Anführungszeichen können Sie den Fehler vermeiden. Hier ist der korrigierte Code:
#!/usr/bin/expect -f
# exp_internal 1 ;# uncomment to turn on expect debugging
set timeout -1
spawn rsync -av -e "ssh -p 10022 -i ~/.ssh/yuis.key" hoge.md [email protected]:~/yuis.xsrv.jp/public_html/_tmp
expect "Enter passphrase"
send "yourownpassword\n"
expect eof
Mit dieser Änderung sollte der rsync-Befehl normal ausgeführt werden.