JP Coders

Published on

expectでrsyncがエラーになる場合の対処法

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 yuis@sv2031.xserver.jp:~/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 yuis@sv2031.xserver.jp:~/yuis.xsrv.jp/public_html/_tmp
expect "Enter passphrase"
send "yourownpassword\n"
expect eof

これで、rsyncコマンドが正常に実行されるようになります。

Authors
  • avatar
  • Name
  • 情報技術者 / Z世代プログラマー / 米大学院にてデータサイエンスを学ぶ

  • ITプロフェッショナルとして活動しています。React.js等のモダンなウェブ制作・アプリ開発を得意としており、Java・Python・Rust等のプログラミング言語を用いたソフトウェア開発全般を行っています。

お手伝いできますか? 🤝

他の方法でのご連絡をご希望ですか?
web制作ご依頼受付中

本記事で掲載している情報やコードは執筆時点のものであり、動作を保証するものではありません。 自己責任のもと、プログラムの実行や情報の利用にあたってはご注意ください。


本記事には提携する企業の広告が含まれる場合があります。