2013-02-26 172 views
0

我在從一個函數調用getPassword來bash的回報變量()的返回「蘋果$ 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中?

感謝

+0

它是一個變量,或包含該字符串的變量,或包含該字符串或文件的文件? – Ryan 2013-02-26 03:12:15

+0

你知道執行'FOO ='apple $ 123 $''會將字符串'apple23 $'存儲到'FOO'中,因爲它會嘗試解釋'$ 1',對吧?你的意思是'FOO ='apple $ 123 $''? – 2013-02-26 03:14:41

+0

如果它是一個變量,它將已經插入'$ 1'。沒有辦法扭轉這種情況。 – Ryan 2013-02-26 03:16:02

回答

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 
' 

使用單引號更容易寫(讀)的期望腳本(沒有所有的反斜槓)。測試:

$ getpassword() { echo 'abc$123'; } 
$ FOO=$(getpassword) expect -c 'puts "pw=$env(FOO)"' 
pw=abc$123 
$ echo "> $FOO <" 
> < 
相關問題