期望不匹配的全局模式



我已经编写了一个脚本来自动登录过程,下面是我遇到问题的代码的一部分。

spawn globalprotect connect --portal vpnconnect.myserver.com
expect { "1234myuser*:" } {
send -- "r"
}

运行globalprotect connect --portal vpnconnect.myserver.com终端输出时的提示如下:

Retrieving configuration...                                            
vpnconnect.manchester.ac.uk - Enter login credentials
username(1234myuser):

在这个阶段,我需要输入一个换行符(因此是send -- "r"),但是glob模式"1234myuser*:"不匹配这个序列。下面是运行expect -d ./myscript.sh

的输出
expect version 5.45.4
argv[0] = expect  argv[1] = -d  argv[2] = ./myscript.sh 
set argc 0
set argv0 "./myscript.sh"
set argv ""
executing commands from command file .manvpn.sh
spawn globalprotect connect --portal vpnconnect.myserver.com
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {141688}
expect: does "" (spawn_id exp4) match glob pattern "1234myuser*:" "? no
Retrieving configuration...                                            
expect: does "r                                                                       rRetrieving configuration...rn" (spawn_id exp4) match glob pattern "1234myuser*:" "? no
vpnconnect.myserver.com - Enter login credentials
username(1234myuser):
expect: does "r                                                                       rRetrieving configuration...rnvpnconnect.myserver.com - Enter login credentialsrnusername(1234myuser):" (spawn_id exp4) match glob pattern "1234myuser*:" "? no
expect: timed out

N。B我的用户名显然不是1234myuser,而是类似的字母数字字符序列。

N。B我也尝试过类似的glob模式,如*(1234myuser):","*1234myuser*",但无济于事。

Expect使用Tcl,在Tcl中{ "1234myuser*:" }" "1234myuser*:" "相同。

你应该直接写:

expect "1234myuser*:" {
send -- "r"
}

最新更新