
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 コマンドを実行」
が問題みたいなのですが何がまずかったのでしょうか?
No.3ベストアンサー
- 回答日時:
おはようございます。
これはおそらく先の質問
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
"
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=924035
http://oshiete1.goo.ne.jp/kotaeru.php3?q=925167
この回答への補足
皆様、ご回答有難うございます。お手数お掛けしております。
> http://oshiete1.goo.ne.jp/kotaeru.php3?q=1115230
> の参考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
> "
/home/fat32/ # expect コマンドの管理下でscpを実行する
コマンドの管理下でscpを実行する: Not a directory
invalid command name "こめんと"
while executing
"こめんと"
となりました。序でに
expect \"password:\" #こめんと
send \"$PASSWD\r\" #こめんと
interact
"
としてみましたら、
/home/fat32/ # expect コマンドの管理下でscpを実行する
コマンドの管理下でscpを実行する: Not a directory
usage: send [args] string
while executing
"send "xxxxxxxx\r" #こめんと"
となってしまいました。
何か勘違いしてますでしょうか?
No.4
- 回答日時:
>expect \"password:\" #こめんと
ごめんなさい。
expect \"password:\" ;こめんと
の「こめんと」は#込みのつもりでした。
書きこんだあとに気づいたのですが、
やっぱり誤解がありましたね。
expect \"password:\" ;#こめんと
としてください。
しかし、コメントなんてイランでしょうから、けずっていいとおもいますよ。
この回答への補足
お手数お掛けしましてスイマセン。
> expect \"password:\" ;#こめんと
> としてください。
> しかし、コメントなんてイランでしょうから、けずっていいとおもいますよ。
expect -c " # expect コマンドを実行
set timeout 20
spawn scp -P 60001 $TARGET.lzh $UNAME@$HOST:/home/fat32/ ;# expect コマンドの管理下でscpを実行する
expect \"password:\" ;#こめんと
send \"$PASSWD\r\" ;#こめんと
interact
"
として、上手くいきました。感動です。 \(^o^)/
これでリモートホストに自動バックアップできます。
どうも有り難うございました。m(_ _)m
No.2
- 回答日時:
おそらく、expect -c " のダブルクォーテーションが閉じられていないからではないでしょうか?
こんな感じで試してみて下さい。
#!/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\"
"
↑これ
この回答への補足
> send \"$PASSWD\r\"
> "
> ↑これ
閉じ「"」が必要だったのですね。
/home/fat32/ # expect コマンドの管理下でscpを実行する
コマンドの管理下でscpを実行する: Not a directory
usage: send [args] string
while executing
"send "user01\r" # login: が出たらログイン名を打ち込む"
となりました。ログイン名は不要でしたね。
No.1
- 回答日時:
こんばんは。
エラーメッセージによると、文が閉じられてない!って怒られてますよね。
「expect -c " # expect コマンドを実行」
この「"」ダブルコーテーションって必要なんでしょうか?
必要だとしてもひとつしかない(=カッコとして成り立ってない)し¥マークもついてないのが気になりました。
※いま手元に環境がないんで私のほうでは試せません。
すいません。
この回答への補足
ありがとうございます。
「"」の直前に「\」を入れたら
missing "
while executing
"""
spawn: not found
couldn't read file "login: ": no such file or directory
send: not found
couldn't read file "sword: ": no such file or directory
send: not found
となりました。
「"」を取っ払ったら
expect: option requires an argument -- c
usage: expect [-div] [-c cmds] [[-f] cmdfile] [args]
spawn: not found
couldn't read file "login: ": no such file or directory
send: not found
couldn't read file "sword: ": no such file or directory
send: not found
となりました。
「/usr/bin/expect -c "" # expect コマンドを実行」
としたら
spawn: not found
couldn't read file "login: ": no such file or directory
send: not found
couldn't read file "sword: ": no such file or directory
send: not found
となりました。でもspawnの行で引っかかってしまいます。
うーん、難しいんですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スクリプトのエラー「unexpecte...
-
bashでシングルクォート内の変...
-
UNIXのbashエラーでnot a valid
-
SONYの音楽ソフト「x-アプリ」...
-
ファイル名についている「-」と...
-
Dirコマンドでフォルダ内ファイ...
-
コマンドプロンプトにおけるコ...
-
Linux のシェルスクリプトの強...
-
sudoで実行したコマンドの実行...
-
Docker環境は以下通りです。doc...
-
python IDLEで訂正、削除のやり...
-
Linuxのファイルの行き先について
-
TeraTermで操作する際の設定に...
-
viエディタが起動しない
-
画面の文字をさかのぼってみる...
-
Windowsのローカルディレクトリ...
-
ログインシェルについて
-
batである文字列内に特定の文字...
-
gnome-terminalの使い方教えて...
-
党首討論を見てます。 この石破...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スクリプトのエラー「unexpecte...
-
bashでシングルクォート内の変...
-
シェルスクリプト実行で”そのよ...
-
crontabでsql/plusの起動
-
Linuxでシェルスクリプトがフル...
-
Linux 月を英語表示したい
-
apachectl start command not f...
-
Linuxで自作バッチファイルの置...
-
bad interpreterで、シェルが使...
-
crontabでjavaだけが上手く動い...
-
Cronジョブの終了時刻を簡単に...
-
自動パスワード入力でscpするス...
-
CygwinでX Windiws Systemが起...
-
hp-uxで時間(時計)を合...
-
UNIXのbashエラーでnot a valid
-
Cシェルのかっこいいプロンプト...
-
sudoでNOPASSWDとしてもパスワ...
-
cronの@rebootでのdateコマンド...
-
シェルスクリプトで$RANDOMの値...
-
Ubuntuの『sudo visudo』コマン...
おすすめ情報