各コマンド出力を対応するログファイル予想スクリプトにリダイレクトする

各コマンド出力を対応するログファイル予想スクリプトにリダイレクトする
set commands {
   "show phone xxx 11"
   "show phone yyy 22"
   "show phone zzz 33"
}

spawn ssh -o StrictHostKeyChecking=no $UserId@$host
sleep 15
#wait for password prompt
expect "*assword:"
#send password 
send -- "$Passwd\r"
sleep 5
foreach cmd $commands {
    set logfile [join [lrange [split $cmd] 2 end] _]
    log_file -a $logfile
    send -- "$cmd\r"
    expect -re "admin:"
    exp_sleep 8
    log_file
}

コマンド出力を適切なログファイルにリダイレクトできません。

xxx_11 log file contains 'spawn ssh -o StrictHostKeyChecking=no $UserId@$host' output.
yyy_22 log file contains 'show phone xxx 11' command output.
zzz_33 log file contains 'show phone yyy 22' command output.

以下を介してログファイルに書き込む方法:

XXX_11 log file contains 'show phone xxx 11' command output
yyy_22 log file contains 'show phone yyy 22' command output
zzz_33 log file contains 'show phone zzz 33' command output

助けてくれてありがとう。

答え1

最初のプロンプトは、最初のプロンプトの前に出力を読み取りますexpect -re "admin:"。おそらく、次のようなプロンプトが表示されます。sshadmin:今後コマンドの送信を開始します。

あなたはexpect電話を受けられませんでした今後あなたのループ消費するコマンドを送信する前に、これまですべての出力が送信されました。何を出力すべきかわからない場合予想される、タイムアウトしたアイテムにsleep 5置き換えることができますexpect

関連情報