2013-07-12 71 views
1

我正在使用expect來自動化一些bash腳本。一切順利,直到我需要執行一個源腳本;然後我得到這個錯誤:需要使用expect產生源代碼腳本

couldn't execute "source setNAME.sh": no such file or directory 
while executing 
"spawn "source setNAME.sh"" 
(file "./setNAME.exp" line 2) 

我用期待的一個基本方式(卵/期望/發送/交互的);問題在於產卵。讓我告訴一個很簡單的例子:

腳本讀取一個名稱,回聲的價值和出口環境的「姓名」:

/home/edu/scripts [] cat setNAME.sh 
#!/bin/bash 
echo "Your name?" 
read name 
export NAME=$name 
echo "Provided NAME is $name" 

如果你有「源」,然後輸入值將執行作爲環境變量導出。正是我需要的:

/home/edu/scripts [] source setNAME.sh 
Your name? 
Dennis 
Provided NAME is Dennis 

/home/edu/scripts [] echo $NAME 
Dennis 

讓我們使用期望避免相互影響,設置「EDU」作爲名稱:

/home/edu/scripts [] cat setNAME.exp 
#!/usr/bin/expect 
spawn setNAME.sh 
expect "Your name?" 
send edu\r 
interact 

/home/edu/scripts [] setNAME.exp 
spawn setNAME.sh 
Your name? 
edu 
Provided NAME is edu 

/home/edu/scripts [] echo $NAME 
Dennis 

但這個名字,很明顯,仍然是丹尼斯:「EDU」顯示在sh腳本輸出中,但不能導出爲NAME,因爲expect腳本會生成setNAME.sh腳本的WITHOUT源(或腳本之前的點)。

問題是,我不能這樣做,因爲我得到的錯誤在開始評論。

任何想法解決/負擔這種需求?

在我的情況下,腳本要複雜得多和其他的解決方案也是無效的,比如這樣的事情:

source script.sh << EOF 
<option1> 
<option2> 
... 
EOF 

這就是我試圖用期待的理由...

非常感謝!

+0

優秀的第一個問題,對不起,不是期望專家,但是你嘗試過'spawn source setname.csh'嗎?祝你好運。 – shellter

+0

當然,這是我做的第一件事(抱歉,我沒有解釋清楚)。我不明白原因,但肯定有一個。我也試過用引號:產生「源碼