2015-11-24 24 views
0

是否知道是否可以在期望腳本中分配和打印expect變量並封裝在bash腳本中。好吧,這是不明確的,我知道,讓我們來看看下面的例子:期望在bash上下文中設置變量

#!/bin/bash 

..some bash code.. 

/usr/bin/expect << EOF 
    set hello "abcd" 
    puts "$hello" 
    exit 
EOF 

通常情況下,它應該打印出「ABCD」,因爲這是變量「你好」的內容,但它打印我什麼..只是空白「\ n」個空間

[email protected]:~$ ./call_to_bash_script.sh 

[email protected]:~$ 

Expect是工作以及如果我嘗試只是做:把「ABCD」這我打印出來。

[email protected]:~$ ./call_to_bash_script.sh 
abcd 
[email protected]:~$ 
+0

而如果你把'設置你好「ABCD」'了'expect'前呼叫? ''EOF'(heredoc)將所有內容視爲一個字符串(在這種情況下爲'expect'腳本),所以它不會在那裏執行bash命令。 – Kenney

+0

如果我在heredoc之前就這樣寫:/ usr/bin/expect set hello「abcd」<< EOF ...腳本嘗試將讀取集作爲文件:無法讀取文件「set」:沒有這樣的文件或目錄。 腳本的問題在於它需要從bash腳本中調用,並且需要將大量變量傳遞給expect腳本。我不想浪費時間解析期望腳本中的所有變量,爲什麼bash非常有用。我打電話給一個期望proc返回一個代碼(0或1),我需要測試它是否成功。我不能影響一個變量的值。 –

+0

我應該更清楚,對不起。 「<< EOF'當然是命令的一部分。所以:'set hello「abcd」;/usr/bin/expect << EOF'。因此,將'set hello'放在'..一些bash代碼中.'。 ( – Kenney

回答

3

Heredocs展開bash變量引用。 Bash正在擴展$hello,然後期望有機會看到它。

/usr/bin/expect << 'EOF' 
    set hello "abcd" 
    puts "$hello" 
    exit 
EOF 

或者通過轉義變量參考:您可以通過引述EOF分隔符,像這樣禁用變量擴展

/usr/bin/expect << EOF 
    set hello "abcd" 
    puts "\$hello" 
    exit 
EOF