SSHを介してコンピュータでいくつかのコマンドを実行するためにExpectを使用するスクリプトがあります。スクリプトの一部は、ファイルに保存する複数ページの出力を生成するコマンドを実行します。
キープロンプトも記録せずに予想されるスクリプトの一部だけをファイルに出力するにはどうすればよいですか?
私が持っているものは次のとおりです
expect "something"
send "command that causes multi-page output with --More-- or (q)uit options\r"
#looping through output so that all pages are shown
log_file -noappend file.log #logging should start now
expect {
-ex "--More--" {
send "\r";
exp_continue;
}
} #I want to have output of only this part of expect script
# everything since last command before loop is issued to end of loop
log_file #Logging should stop here
send "other commands"
ログファイルに「--More--または(q)uit」を追加せずにループ出力のみをファイルに追加するにはどうすればよいですか?
また、ログには、log_fileを設定する前のループ前の最後の転送と、log_fileを削除した後のループ後の最初のプロンプトも含まれています。これは簡単に削除できるため、大きな問題ではありません。
--More-- or (q)uit^M ^M
私の主な問題はここに含まれているログファイルです。
したがって、ログは次のようになります。
actual command output lines I want
...
--More-- or (q)uit^M ^M"actual command output line I want"
--More-- or (q)uit^M ^M"actual command output line I want"
ログに「more」および「exit」オプションを追加せずにループ出力をファイルに書き込むにはどうすればよいですか?
答え1
ネットワークデバイス出力の一時停止は、オペレータが使用するためのものです。
自動化ツールを使用するための最良の方法は、デバイスがそのページを無効にするように指示するために使用するデフォルトのメカニズム/言語を使用することです。
シスコについて話している場合、これらの設定はシステム全体ではなくセッションごとに設定されるため、この設定が必要なすべてのスクリプトの先頭に表示する必要があります。
Ciscoルータ/スイッチを扱うとき、私は通常次のコマンドを送信します。
terminal length 0
または期待値を使用するには
send "terminal lenght 0\r"
PS。実際の端末長の構文は、シスコのオペレーティングシステムによって異なる場合があります。たとえば、Cisco Firewall Manager カードの構文は若干異なります。しかし、この質問の角度はここでは話題ではありません。