私は自分自身にexpectスクリプトを教えてきましたが、expectスクリプトの正規表現に関していくつかの明確な質問があります。SunのiLOMsshセッションを生成し、SNMPエージェントを有効にするコードを作成しました。結局のところ、iLOM2とiLOM3はこのプロセスを異なる方法で処理するため、この問題を解決するためにこのスクリプトを作成します。正規表現を適切に一致させる方法を見つけようとしているときに、オンラインで多くの競合するソリューションに遭遇し、今ではかなり混乱しています。私が見つけた最高の助けは、expectマンページでした。私はなんとかうまくいくことができましたが、私の解決策が汚れていて、私が見つけたどの例とも一致しないのではないかと心配しています。だから私の実際の質問:私のコードはどのように機能していますか?もっと良い方法はありますか?
カスタムソリューションを盲目的にメッシュ化するのではなく、Expectスクリプトについてもっと学びたいと思っています。
注:この場合も、このコードは機能します。それがどのように評価されるかを学びたいです。
キャプチャする出力:
spawn ssh -o StrictHostKeyChecking=no root@<host>
Password:
Sun(TM) Integrated Lights Out Manager
Version 2.0.2.6
Copyright 2008 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
->
アイデアは「バージョン2」をキャプチャすることです。そこから2番を抽出します。
スクリプトスニペットを期待する:
set prompt "\\\->"
send "$pwd\r"
expect {
timeout { ...timeout action... }
$prompt { ...regex didn't match action... }
-indices -re {(Version (\d+).)} {
#Regex to find ILOM Version.
if {[info exists expect_out(2,string)]} {
set ilom_version $expect_out(2,string)
} else { ...regex didn't match properly action... }
expect $prompt
}
}
正確な正規表現は-indices-re{(Version(\ d +)。)}です。上でリンクしたexpectのマンページにはまったく異なる例があるため、最終的に機能する構文を理解するのに長い時間がかかりました。すなわち:-re "failed | invalid password"私がその構文を採用するときはいつでも、すべてがバラバラになります。「バージョン」、バージョン、{バージョン}、(バージョン)すべてが失敗します。
だから私は自分のコードがどのように機能しているか、そしてなぜそれが私が見つけたすべての例とそれほど違うのかについて混乱していると思います。任意のアイデアや提案をいただければ幸いです。お時間をいただきありがとうございます。