我已经编写了一个脚本来自动登录过程,下面是我遇到问题的代码的一部分。
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"
}