私はどのように働くことを期待するかを理解しようとしています。私の知る限り、expect スクリプトは「expect」ステートメントと「send」ステートメントで構成されています。したがって、画面に表示される適切な「expect」ステートメントごとに、「send」ステートメントが呼び出されます。また、コマンド「interact」は、制御がユーザーに返され、ユーザーが端末と対話できることを意味します。私が間違っている場合は修正してください。これらの 2 つのステートメントは魅力のように機能します。
1位:
#!/usr/bin/expect
spawn ssh -q localhost;
# Handles following message: "Are you sure you want to continue connecting (yes/no)?"
expect "yes";
send "yes\r";
interact;
2番目:
#!/usr/bin/expect
spawn ssh -q localhost;
# Handles following message: "pista@localhost's password:"
expect "assword";
send "password\r";
interact;
インターネットで、次のコードのようなものがこれら2つの例を1つに結合する必要があることを発見しました:
#!/usr/bin/expect
spawn ssh -q localhost "uname -a";
expect {
"*yes/no*" { send "yes\r" ; exp_continue }
"*assword:" { send "password\r"; interact }
}
ただし、この例では、完全なログインに成功するとすぐに終了します (ここでは「対話」が機能していないようです。以下の出力を参照してください)。
[pista@HP-PC .ssh]$ ./fin.exp
spawn ssh -q localhost uname -a
pista@localhost's password:
Linux HP-PC 3.6.6-1.fc16.x86_64 #1 SMP Mon Nov 5 16:56:43 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
[pista@HP-PC .ssh]$ set | grep SHLV
SHLVL=2
3 つの質問:
- これらの奇妙な期待構文の意味は、この「大きな」期待ではパターンの順序に重点が置かれていないということだけです。
- exp_continue が正確に何をしているのかを明確にしていただけますか?
- ここで対話が機能しないのはなぜですか?
どうもありがとう