expect 使用方式求助
我想要判断执行程序的输出,是否有我指定的字符串怎么搞啊
比如
P1 程序执行后输出有 两种情况 情况 a:回显字符串中包含 aaaaa 情况 b: 回显字符串中包含 bbbbb
现在想判断 P1 程序执行后 如果是情况 a 就 执行 aCommandLine 情况 b 就 执行 bCommandLine
伪代码如下 :
if {expect "aaaa"} {
expect "aaaa" { send "aCommandLine"}
} else if { expect "bbbb"} {
expect "bbbb" { send "bCommandLine"}
}
1
kaikai5601 2020-09-10 10:57:47 +08:00
你把输出传到一个变量里面,然后在判断变量
|
2
Number13 OP @kaikai5601 怎么将回显的字符串存到变量啊 大佬
|
3
yorks 2020-09-10 11:37:59 +08:00
ret=`P1`
或者 ret=$(p1) |
4
nuk 2020-09-10 11:52:32 +08:00
出售《 TCL/TK 入门经典》
|
5
ungrown 2020-09-10 13:55:28 +08:00
不如用 python
subprocess 直接抓进程的 stdout stderr 然后 if elif else |
6
fcitx 2020-09-10 14:11:25 +08:00
我很菜,但是我不明白为什么要 expect 放到 if 里面?
难道不是: expect "aaaa" { send "aCommandLine" } expect "bbbb" { send "bCommandLine" } |
7
sleepm 2020-09-10 14:15:01 +08:00
参考 https://gist.github.com/prabirshrestha/3080525
UNAME=$(uname) if [ "$UNAME" == "Linux" ] ; then echo "Linux" fi |
8
ly4572615 2020-09-10 14:32:57 +08:00
我完全没有用过 expect,直接到了 ansible 时代
|
9
wangyzj 2020-09-10 14:49:40 +08:00
```
#!/bin/bash auto_login_ssh () { expect -c "set timeout 6; spawn -noecho scp -o StrictHostKeyChecking=no /home/appadmin/.ssh/id_rsa.pub $2@$3:/home/$2/.ssh/authorized_keys; expect *assword:*; send -- $1\r; expect *id_rsa.pub*; sleep 3; expect *denied*; exit; interact;"; } auto_login_ssh $1 $2 $3 ``` 供参考 |
11
Number13 OP 感谢各位,结帖了,各位提供的是 shell + expect 我指的是 纯 expect 脚本(本人问题描述有问题) ,解决方法也是和 6L 的一样的方式,所以感谢各位大佬
|
12
lrvy 2020-09-10 18:04:11 +08:00
之前用 expect 写过登陆堡垒机的脚本,可以参考下:
#!/usr/bin/expect -f set timeout 30 # 登陆堡垒机 spawn ssh op # 选择 Group expect "group:" sleep .1 send "1\r" # 选择 Server expect "server:" sleep .1 send "1\r" # 提权 expect "login:" sleep .1 send "sudo -s\r" sleep .1 # ssh server send "ssh [lindex $argv 0]\r" sleep .1 interact |