如何从 Expect 中的变量生成

tro*_*a01 4 tcl expect

有些进程会在计算过程中获取密码。我希望在进程开始时插入密码,因此我尝试创建一个通用的 Expect 脚本,该脚本将生成一个进程,然后为其指定一个密码。

该期望脚本接受要输入的密码和要生成的进程:

#!/usr/bin/expect

set timeout 120

# Get program to spawn and password to send
set pswd [lindex $argv 0]
set program [lindex $argv 1]

spawn $program

expect "Password:"
send "$pswd\r"

interact
Run Code Online (Sandbox Code Playgroud)

这将从 bash 函数中调用:

function vup {
    echo -n "Enter Password: "
    read -s pswd
    echo
    expectPassword.exp $pswd "vagrant up"
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

couldn't execute "vagrant up": no such file or directory
    while executing
"spawn [join $program]"
Run Code Online (Sandbox Code Playgroud)

当我在没有参数的程序上使用该脚本时,该脚本似乎可以工作。但我不确定如何使其适用于参数数量可变的情况。

kon*_*box 5

一种方法是使用eval

eval spawn $program
Run Code Online (Sandbox Code Playgroud)

  • 或者使用:`spawn {*}$program`(如果您的 Expect 中有 Tcl 8.5 或 8.6)。 (7认同)
  • @trotha01 将您的分配更改为“set program [lrange $argv 1 end]” (2认同)