質問: 自動パスワード入力でscpするスクリプトでエラー「unterminated quoted string」 win2kのcygwinで下記のスクリプトを試してみました。 (ローカルのファイルをscpで自動転送) $ uname -a cygwin_nt-5.0 upsil 1.5.11(0.116/4/2) 2004-09-04 23:17 i686 unknown unknown cygwin $ cat ./test.sh #!/bin/sh host=192.168.1.105 # scp するマシン名を設定 uname=user01 # ログイン名を設定 passwd=xxxxxxxx # パスワ-ドを設定 target=/cygdrive/c/cygwin/home/root/hoge /usr/bin/zip -r $target.lzh $target expect -c " # expect コマンドを実行 set timeout 20 spawn scp -p 60001 $target.lzh $uname@$host:/home/fat32/ # expect コマンドの管理下でscpを実行する expect login:\ ; send \"$uname\r\" # login: が出たらログイン名を打ち込む expect sword:\ ; send \"$passwd\r\" # password: が出たらパスワ-ドを打ち込む #expect \"$\" ; send \"ls\r\" # $ が出たら ls を打ち込む #expect \"$\" ; send \"exit\r\" # $ が出たら exit を打ち込む $ which expect /usr/bin/expect $ which zip /usr/bin/zip $ ./test.sh と実行すると : 9: syntax error: unterminated quoted string となり、終ってしまいました。 「expect -c " # expect コマンドを実行」 が問題みたいなのですが何がまずかったのでしょうか?
回答: おはようございます。 これはおそらく先の質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1115230 の参考urlを参照されたのだと思いますが、 私もそのままではうまくいきませんでした。 そのurlの例は間違っているのだと思います。 (動かした後でコメントをいれて、動作確認をしなかったのかな?) ちなみにコメントを入れる場合は下のように、行末に; をつけてから入れるとよいようです。 基本的にエラーの原因は#2さんのご指摘のとおりです。 参考urlも良く見ると最後に"がありますよ。(それでも動かないと思いますが。。。) ただし、今の場合、最後に interact を入れないとうまく動かないとおもいます。(少なくとも私はそうでした。) この掲示板の過去の質問が参考になりました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=924035 http://oshiete1.goo.ne.jp/kotaeru.php3?q=925167 #!/bin/sh host=192.168.1.105 uname=user01 passwd=xxxxxxxx target=/cygdrive/c/cygwin/home/root/hoge /usr/bin/zip -r $target.lzh $target expect -c " set timeout 20 spawn scp -p 60001 $target.lzh $uname@$host:/home/fat32/ ;こめんと expect \"password:\" ;こめんと send \"$passwd\r\" ;こめんと interact "