2011-04-30 42 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