![将每个命令输出重定向到各自的日志文件期望脚本](https://linux22.com/image/182810/%E5%B0%86%E6%AF%8F%E4%B8%AA%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E5%90%84%E8%87%AA%E7%9A%84%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E6%9C%9F%E6%9C%9B%E8%84%9A%E6%9C%AC.png)
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:"
的输出。大概会发出这样的提示ssh
admin:
前你开始发送命令。
你错过了一个expect
电话前你的循环到消耗在发送命令之前到目前为止发送的所有输出。如果你不知道输出什么预计,你可以用任何超时的东西替换你sleep 5
的expect
。