0

「apple$123123」を返す関数呼び出しgetpassword()からのbashreturnの変数があります

FOO=`getpassword`

内部に$を含むFOO変数を使用し、expectプログラムに渡したい

 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 に答える