expectでrsyncがエラーになる場合の対処法
expectを使用してrsyncを実行する際に、「Missing trailing-’ in remote-shell command. rsync error: syntax or usage error (code 1) at main.c(430) [sender=3.1.1]」といったエラーが発生することがあります。このエラーの原因と対処法について説明します。
エラーの概要
2年前から放置していたエラーですが、調べた結果、解決方法が見つかりました。このエラーが発生する場合、次のようなメッセージが表示されます。
Missing trailing-' in remote-shell command.
rsync error: syntax or usage error (code 1) at main.c(430) [sender=3.1.1]
エラー発生時のコード例
以下は、エラーが発生するexpectスクリプトの例です。
#!/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
原因
エラーの原因は、rsyncコマンド内で使用しているシングルクォーテーションにあります。シングルクォーテーションを使用すると、rsyncがコマンドを正しく解釈できないことがあります。
参考リンク:
解決法
シングルクォーテーションをダブルクォーテーションに変更することで、エラーを回避できます。修正後のコードは以下の通りです。
#!/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
これで、rsyncコマンドが正常に実行されるようになります。