免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6122 | 回复: 5
打印 上一主题 下一主题

[系统管理] expect匹配内容,并打印出来 [复制链接]

论坛徽章:
2
水瓶座
日期:2014-08-20 14:38:50辰龙
日期:2014-09-15 15:49:06
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-02 15:31 |只看该作者 |倒序浏览
我想通过expect 远程登陆,获取进程PID,然后把PID存到变量里,并打印出来。
  1. #!/usr/bin/expect
  2. if { [llength $argv] == 0 } {
  3.         send "Usage: a.exp host password\n"
  4.         exit
  5. }

  6. #exp_internal 1
  7. set timeout -1
  8. set host [lindex $argv 0]
  9. set passwd [lindex $argv 1]
  10. set pid ""
  11. set process [lindex $argv 2]
  12. spawn ssh root@$host
  13. expect {
  14.         "yes/no" {send "yes\r";exp_continue}
  15.         "password:" {send "$passwd\r"}
  16. }
  17. expect "*#"
  18. send -- "ps aux | grep $process | grep -v grep | awk \'{print \$2}\'"
  19. send "\r"
  20. expect -re "\n(\[0-9]*)\n" {
  21.         set pid $expect_out(1,string)
  22.         foreach element $pid {
  23.         puts "-------------------------"
  24.         puts $element
  25.         puts "-------------------------"
  26. }
  27. }
  28. send "exit\r"

  29. expect eof
复制代码
为什么我这样写,就是打印不出来呢?

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
2 [报告]
发表于 2014-09-02 16:42 |只看该作者
我这测试了挺好的呀,你那有什么报错提示?
  1. [seesea@UC ~]# ./a.exp UC init
  2. spawn ssh seesea@UC
  3. gbit@UC's password:
  4. Last login: Tue Sep  2 16:39:50 2014 from UC
  5. [seesea@UC ~]# ps aux | grep init | grep -v grep | awk '{print $2}'
  6. 1
  7. 1991
  8. 25297
复制代码
或者这个功能应该也可以用带执行命令参数的 ssh 命令来做。

论坛徽章:
2
水瓶座
日期:2014-08-20 14:38:50辰龙
日期:2014-09-15 15:49:06
3 [报告]
发表于 2014-09-02 17:12 |只看该作者
回复 2# seesea2517

运行是没有问题的,我是想取出PID,然后通过send "kill -9 $PID"来把远端的进程杀掉
  1. expect -re "\n(\[0-9]*)\n" {
  2.         set pid $expect_out(1,string)
  3.         foreach element $pid {
  4.         puts "-------------------------"
  5.         puts $element
  6.         puts "-------------------------"
  7. }
复制代码
所以我在这里用这种方法打印一下,有没有取到

   

论坛徽章:
2
水瓶座
日期:2014-08-20 14:38:50辰龙
日期:2014-09-15 15:49:06
4 [报告]
发表于 2014-09-03 17:03 |只看该作者
终于搞出来了!!!!激动啊

论坛徽章:
0
5 [报告]
发表于 2021-10-21 16:51 |只看该作者
不知道这位是怎么弄出来的? 我也好奇试了一下不行。 有人能指点一下么?

expect -re "\n(\[0-9]*)\n" {
        set pid $expect_out(1,string)
        foreach element $pid {
        puts "-------------------------"
        puts $element
        puts "-------------------------"
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP