2011-04-30 43 views
1

我正在爲我的應用程序編寫測試套件並使用bash腳本來檢查測試套件輸出是否與預期輸出匹配。下面是一段腳本:將輸入發送到bash的運行shell腳本

for filename in test/*.bcs ; 
do 
    ./BCSC $filename > /dev/null 
    NUMBER=`echo "$filename" | awk -F"[./]" '{print $2}'` 
    gcc -g -m32 -mstackrealign runtime.c $filename.s -o test/e$NUMBER 
    # run the file and diff against expected output 
    echo "Running test file... "$filename 
    test/e$NUMBER > test/e$NUMBER.out 
    if [ $NUMBER = "4" ] 
    then 
     # it's trying to read the line 
     # Pass some input to the file... 
    fi 
    diff test/e$NUMBER.out test/o$NUMBER.out 
done 

測試#4測試從標準輸入讀取輸入。我想測試腳本#4,如果是的話,傳遞一組樣本輸入。

我才意識到,你可以不喜歡它

test/e4 <test/e4.in> test/e4.out 

其中e4.in具有樣本輸入。是否有另一種方法將輸入傳遞給正在運行的腳本?

回答

1

如果你想輸入的數據直接在腳本提供,使用此文檔:

test/e$NUMBER > test/e$NUMBER.out 
    if [ $NUMBER = "4" ]; then 
    then 
     test/e$NUMBER > test/e$NUMBER.out <<END_DATA 
test input goes here 
you can supply as many lines of input as you want 
END_DATA 
    else 
     test/e$NUMBER > test/e$NUMBER.out 
    fi 

有幾個變種:​​如果你引述(即<<'END_DATA'),它不會像在這裏的文檔中那樣替換$ variable替換。如果使用<<-DELIMITER,它將刪除每行輸入中的前導製表符(這樣您可以縮進輸入以匹配周圍的代碼)。有關詳細信息,請參閱bash手冊頁中的「Here文檔」部分。

0

您提到的方式是在發出命令/腳本時將文件重定向到stdin的常規方法。

如果你要詳細說明你正在尋找的「其他方式」,比如說,爲什麼你甚至需要一種不同的方式來實現呢?有什麼你需要做的,這種方法不允許?

+0

對不起,我想'expect'類似的東西,我猜想,但不知道如何有條件地做,並在shell腳本。 – 2011-04-30 22:39:38

0

你可以這樣做:

cat test/e4.in | test/e4 > test/e4.out