私はUbuntu 9.10を持っています(テストのために近い将来にexpect5.45で変更することはできません)。 Expectは機能していますが、少なくとも2つの問題があります。 最初はexpectが文字列 "password:"と一致していないようです。私のマシン上で 、手動の相互作用は以下のように表示されます:
[email protected]:~# rlogin $remoteAddress -l root
[email protected]'s password:
Linux systest-desktop 2.6.31-22-generiC#70-Ubuntu SMP Wed Dec 1 23:51:13 UTC 2010 i686
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
72 packages can be updated.
70 updates are security updates.
Last login: Mon Jun 20 13:40:22 2011 from monkey2.local
[email protected]:~#
次のようにスクリプトの内容は次のとおりです。
#!/usr/local/bin/expect -f ## Connect to a neighboring linux box. spawn ssh nn.nn.nnn.nnn -l root expect "password:\n" send "mypassword\n" send "$expect_out(0,string)"
スクリプトがパスワードを要求するラインを取得し、表示しますが、タイムアウトする。 私が使用して試した:「パスワード:」「パスワード」を、「パスワード:\ rを」とパスワード:*」どれもが一致するように見えるん
第二の問題は、expect_out変数がないということです。認識され、私は(名前がある「これ」とのみ11行あります!)スクリプトを実行したとき、私は次のエラーを取得する:
「expect_out(0、文字列)」を読み取ることができません:そのような変数 を実行している間 "" $ expect_out(0、string)を送信 "" (ファイル "this"行18)
ありがとうグレン。驚いたことに、expect_out()が動作しています。あなたの提案で、私はマッチを得ています。ご協力ありがとうございました! (私はDon Libesの "Exploring Expect"を持っていますが、今は第4章に入っています。私はsendのオプションを調べる必要があります。 –
@Mike、 " - "オプションは、送信したい文字列がハイフンで始まる場合にのみ、コマンドのオプションの終わりを明示的に通知することです。これは良い習慣です。対処していればあなたのバットを保存しますユーザー入力と 'send-$ user_input \ r'を付けてください –
ありがとう、@glennjackman!これはあなたのおっしゃった本ですか?http://shop.oreilly.com/product/9781565920903.do – Till