首页 > 其他分享 >expect 保存日志文件

expect 保存日志文件

时间:2023-07-13 11:35:08浏览次数:44  
标签:set 保存 send user 日志 yes expect

1. $expect_out(buffer)
这种方式需要注意不能在shell嵌套expect的情况下使用,因为在这种情况下expect脚本中的$xx变量会被解析成shell部分传入的参数,无法起到原本在expect脚本下的作用。
其次,$expect_out(buffer)需要和send内容在两个不同的expect循环中出现。

#!/bin/expect
set user "root"
set host "10.25.103.2"
set loginpass "eve" 
​spawn ssh -p 23 $user@$host
​set timeout 30​
set ofile "info_$host"    # 在本地创建日志
set output [open $ofile "w"]        # 打开日志,准备写入

​expect {
    -re "Are you sure you want to continue connecting (yes/no)?"{        
          send "yes\r"        
          }    
    -re "password:" {        
          send "${loginpass}\r"        
          }     
    -re "Permission denied, please try again." {        
          exit        
          }​
}​

expect {    
     "#" {        
         send {cat /proc/net/dev}        
         send "\r"    
     }​
}​
expect {   
     "#" {    
         set outcome $expect_out(buffer)  # 获取回显    
         send "\r"    
         puts $output $outcome            # 将回显写入日志 
         unset expect_out(buffer)         # 清空回显缓存  
      }
}​

close $output        # 关闭日志文件​
expect {    
   -re $cmd_prompt {        
        send "exit  \r"     
    }
}​
interact

 

在/usr/bin/expect<<-EOF中创建日志文件(终端有回显)
主要写法,就是在/usr/bin/expect<<-EOF下面添加一行:

/usr/bin/expect<<-EOF
log_file ssh.log
......
EOF

日志将保存到ssh.log文件中

 

 在/usr/bin/expect <<EOF中创建日志文件(终端无回显)
这种方式就是直接把回显写入日志文件,这样本地终端就不会有回显了,干净了许多,方法就是利用输出重定向:

/usr/bin/expect <<EOF > ${log_file}
....
EOF

同时在expect脚本之后我们可以对回显结果进行一个判断,查看是否有报错:

/usr/bin/expect <<EOF > ${log_file}
    set timeout -1
    spawn ssh -p 23 ${user_name}@${host_ip}
    expect {
        "(yes/no)?"
        {
            send "yes\n"
            expect "*assword:" { send "${user_password}\n"}
        }
        
        "*assword:"
        {
            send "${user_password}\n"
        }
    }
    sleep 1
    send "${cmd}\n"
    send "exit\n"
    expect eof
EOF

cat ${log_file} | grep -iE "Permission denied|failed" >/dev/null
if [ $? -eq 0 ];then
   echo "Script execute failed!"
   return 1
fi

 

标签:set,保存,send,user,日志,yes,expect
From: https://www.cnblogs.com/vmsysjack/p/17549927.html

相关文章

  • 如何实现怎样实时监测Android系统打印的日志信息的具体操作步骤
    怎样实时监测Android系统打印的日志信息在开发Android应用程序的过程中,日志信息是非常重要的调试工具。通过日志信息,我们可以了解应用程序的运行状态、错误信息以及其他关键信息。为了更好地调试和分析应用程序的日志信息,我们可以实时监测Android系统打印的日志信息。本文将介绍如......
  • Excel单元格进入编辑模式,保存更改退出编辑模式
    在Excel中,按F2键可以进入单元格的编辑模式,以便在单元格中编辑公式或文本。要退出编辑模式并保存更改,可以按Enter键或Tab键。如果要放弃更改并退出编辑模式,可以按Esc键。以下是一些常见的方法来退出编辑模式:按下Enter键:按下Enter键将保存更改并将焦点移动到下一个......
  • R语言中数据输出保存为EPS格式
     001、setEPS()postscript("test001.eps")##输出为EPS矢量图格式plot(1:100,main="justatest")dev.off()    。 ......
  • 企业网络日志分析的关键利器【EventLog Analyzer】
    在数字化时代,企业网络的安全和运维管理变得至关重要。随着企业规模的扩大和信息系统的复杂化,网络日志分析成为了不可或缺的一环。EventLogAnalyzer(以下简称EventLogAnalyzer)作为一款强大的日志分析工具,为企业提供了关键的功能和洞察力,帮助其实现网络安全的保护和高效的运维管理。......
  • MySql开启日志 --记录每条执行的SQL语句
    --第一条SETGLOBALlog_output='TABLE';SETGLOBALgeneral_log='ON';--在重启mysql重启Mysql详情请看:(10条消息)如何重启MySQL,正确启动MySQL_mysqlrestart_wuyepiaoxue789的博客-CSDN博客--重启完成之后可以去数据库`Mysql`中的general_log表里查看,也可以执行一下的......
  • 如何将网站保存为手机app
    1.打开目标页面(hangyejingling.cn)2.点击该按钮3.选择添加至主屏幕4.桌面使用......
  • 转载:PageOffice既保存Word文件中指定区域的数据又保存整篇文件
    一、首先在word文件中给需要在后台获取数据的区域设置以PO_开头的书签。二、通过pageoffice在线打开文件并编辑保存。有两种打开文件的模式1、普通编辑模式(docNormalEdit)普通编辑模式就是简单的打开文件,分别设置SaveDataPage保存数据的方法和SaveFilePage保存文件的方法即可......
  • Qt/C++音视频开发46-音视频同步保存到MP4
    一、前言用ffmpeg单独做视频保存不难,单独做音频保存也不难,难的是音视频同步保存到MP4中,重点是音视频要同步,其实这也不难,只要播放那边音视频同步后的数据,写入到文件即可。最难的是在播放过程中不断随机的切换播放进度,而且还会暂停播放、暂停录制的情况出现,这些个复杂情况的出现,可......
  • journalctl 清理journal日志
    在CentOS7开始使用的systemd使用了journal日志,这个日志的管理方式和以往使用syslog的方式不同,可以通过管理工具维护。使用df-h检查磁盘文件,可以看到/run目录下有日志目录/run/log/journal,占用了数G空间FilesystemSizeUsedAvailUse%Mountedon/dev/mapper......
  • pytorch保存模型及加载模型
    ClassTestModle(nn.Module): def__init__(self): self.conv=nn.Conv(3,6,5) self.pool=nn.MaxPool2d(2,2) ... defforward(self,x): ... ....假如有这样一个模型一、使用状态字典保存模型参数(官方推荐用法)保存模型torch.save(model.state_dict(),PATH......