为什么我的 expect 脚本会提前退出?

Why does my expect script exit prematurely?

这是我的例外脚本:

#!/usr/bin/expect
spawn openvpn --config peter.ovpn
expect -exact "Enter Private Key Password: "
send -- "mypassword\r"

我 运行 它看到 OpenVPN 询问我的客户端密码。但是脚本退出了,显然没有发送密码。当我尝试使用不正确的密码时,它是相同的(没有不正确的密码消息)。如果我从 expect 脚本的末尾删除 send -- "mypassword\r" 行,结果也完全相同。

这是我的第一个 expect 脚本,所以我的语法可能有误。或者可能是 OpenVPN 因使用 expect 脚本连接而将我踢走?

你的语法没问题。问题是在您发送密码后脚本没有更多命令到 运行,因此 expect 脚本退出并杀死 openvpn。

发送密码后需要做什么?

如果你只需要保持openvpn 运行ning,那么这样做:

#!/usr/bin/expect
spawn openvpn --config peter.ovpn
expect -exact "Enter Private Key Password: "
send -- "mypassword\r"
set timeout -1
expect eof

-1 表示 "infinite",expect eof 表示您正在等待生成的进程退出,然后 expect 脚本才能退出。