我正在为我的应用编写一个测试套件,并使用bash脚本检查测试套件输出是否与预期输出匹配。以下是该脚本的一部分:
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测试从stdin读取输入。我想测试脚本#4,如果是这样,则传递一组示例输入。
我刚刚意识到你可以像
那样做test/e4 < test/e4.in > test/e4.out
其中e4.in有样本输入。是否有另一种方法可以将输入传递给正在运行的脚本?
答案 0 :(得分:1)
如果要直接在脚本中提供输入数据,请使用here-document:
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'
),则不会在here-document中替换$ variable replacement。如果您使用<<-DELIMITER
,它将从每行输入中删除前导制表符(因此您可以缩进输入以匹配周围的代码)。有关详细信息,请参阅bash手册页中的“Here Documents”部分。
答案 1 :(得分:0)
您提到的方法是在发出命令/脚本时将文件重定向到stdin的传统方法。
如果您详细说明您正在寻找的“其他方式”,也许它会有所帮助,例如,为什么您甚至需要采用不同的方式呢?你有什么需要做的,这个方法不允许吗?
答案 2 :(得分:0)
你可以这样做:
cat test/e4.in | test/e4 > test/e4.out