2012-04-09 3 views
0

サーバへの期待スクリプトssh-ingの出力の一部をログファイルに書き込もうとしています。スクリプトがファイルの部分出力に書き込むことを期待します。

#!/usr/bin/expect -f 
spawn telnet 192.168.20.222 
match_max 10000 
expect "*?to continue*" 
send -- "\r" 
send -- "show interfaces 1 \r" 
expect -- "*?2626#*" 
send -- "show interfaces 2 \r" 
expect -- "*?2626#*" 
send -- "exit \r" 
expect -- "*?2626>*" 
send -- "exit \r" 
expect "*?y/n*" 
send -- "y \r" 

私は、ファイルへの出力にそれを変更するにはどうすればよい「のlog.txt」show interfaces 1show interfaces 2からわずかの応答:
は今、私はこのスクリプトを持つのでしょうか?

答えて

1
... 
log_file "log.txt" ;#enable loging to file as well 
send -- "show interfaces 1 \r" 
expect -- "*?2626#*" 
send -- "show interfaces 2 \r" 
expect -- "*?2626#*" 
log_file; #disable logging 
... 

'log.txt'には、コマンド+コマンドそのもの+プロンプトからの出力が含まれます。 これで十分ですか?

純粋な出力を得ることは、より複雑になる可能性があります。有用なテクニックは、明示的な角括弧を使用することです(相互作用しているシステムが類似しているかどうかはわかりません)。シェルでは、次のようになります。

send -- "show interfaces 1\r echo '<XYZ>'\r" 
expect "<XYZ>"; #first echoed when the command was typed 
expect { 
    "<XYZ>" { 
     #for the second time echoed when the command finished 
     #here the $expect_out(0,string) contains the command output + the bracket 
     regexp {(.*)<XYZ>} $expect_out(0,string) match pure_cmd_output 
    } 
} 
関連する問題