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
這就是我試圖用期待的理由...
非常感謝!
優秀的第一個問題,對不起,不是期望專家,但是你嘗試過'spawn source setname.csh'嗎?祝你好運。 – shellter
當然,這是我做的第一件事(抱歉,我沒有解釋清楚)。我不明白原因,但肯定有一個。我也試過用引號:產生「源碼