0

我在 bash 中有一个从函数调用 getpassword() 返回的变量,它返回“apple$123123”

FOO=`getpassword`

我想使用内部包含 $ 的 FOO 变量并传递给期望程序

 expect -c "\
    set timeout 90
    set env(TERM)
    spawn rdesktop 192.168.11.1
    expect \"Password:\"
    send -- \"'${FOO}\n'\"
    interact
  "
}

出现错误,因为 $FOO 包含美元符号

Password: can't read "123": no such variable
    while executing

我该如何解决这种问题?我认为的方式是使用 sed 将转义字符打包到 FOO 中?

谢谢

4

1 回答 1

0

你可以试试这个:

# below is purposely on one line -- it sets the FOO env var
# only for the duration of the expect command.
FOO=$(getpassword) expect -c '
    set timeout 90
    set env(TERM) {are you missing something here?}
    spawn rdesktop 192.168.11.1
    expect "Password:"
    send -- "$env(FOO)\r"    # you send '\r' not '\n'
    interact
'

使用单引号可以更容易地编写(和阅读)expect 脚本(没有所有的反斜杠)。测试:

$ getpassword() { echo 'abc$123'; }
$ FOO=$(getpassword) expect -c 'puts "pw=$env(FOO)"'
pw=abc$123
$ echo "> $FOO <"
>  <
于 2013-02-26T04:08:31.883 回答