2011-06-20 6 views
3

私は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)

答えて

4

まず最初は、プログラムを期待してデバッグするときに一番上の近くにこの行を追加することですします

exp_internal 1 

生み出されたプログラムから見た期待を示す(詳細)デバッグ出力をオンにし、それが一致しますかあなたの期待パターン。

一般的に、人はこのような何かを行います。

expect -re {password: $} 
send -- "the_password\r" 

があなたの代わりに\n\r(キャリッジリターン)を送信する必要があります。

+0

ありがとうグレン。驚いたことに、expect_out()が動作しています。あなたの提案で、私はマッチを得ています。ご協力ありがとうございました! (私はDon Libesの "Exploring Expect"を持っていますが、今は第4章に入っています。私はsendのオプションを調べる必要があります。 –

+0

@Mike、 " - "オプションは、送信したい文字列がハイフンで始まる場合にのみ、コマンドのオプションの終わりを明示的に通知することです。これは良い習慣です。対処していればあなたのバットを保存しますユーザー入力と 'send-$ user_input \ r'を付けてください –

+0

ありがとう、@glennjackman!これはあなたのおっしゃった本ですか?http://shop.oreilly.com/product/9781565920903.do – Till

関連する問題