从bash向正在运行的shell脚本发送输入

从bash向正在运行的shell脚本发送输入,bash,shell,expect,sh,Bash,Shell,Expect,Sh,我正在为我的应用程序编写一个测试套件,并使用bash脚本检查测试套件输出是否与预期输出匹配。以下是脚本的一部分: test/*.bcs中文件名的; 做 ./BCSC$filename>/dev/null NUMBER=`echo“$filename”| awk-F“[./]”“{print$2}”` gcc-g-m32-mstackreallign runtime.c$filename.s-o test/e$NUMBER #根据预期输出运行文件和diff 回显“正在运行测试文件…”$filena

我正在为我的应用程序编写一个测试套件,并使用bash脚本检查测试套件输出是否与预期输出匹配。以下是脚本的一部分:

test/*.bcs中文件名的
;
做
./BCSC$filename>/dev/null
NUMBER=`echo“$filename”| awk-F“[./]”“{print$2}”`
gcc-g-m32-mstackreallign runtime.c$filename.s-o test/e$NUMBER
#根据预期输出运行文件和diff
回显“正在运行测试文件…”$filename
测试/e$NUMBER>测试/e$NUMBER.out
如果[$NUMBER=“4”]
然后
#它在试着读台词
#将一些输入传递到文件。。。
fi
差异测试/e$NUMBER.out测试/o$NUMBER.out
完成
测试#4测试从标准输入读取输入。我想测试脚本#4,如果是,则传递一组示例输入

我刚意识到你可以像这样做

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

其中e4.in具有示例输入。是否有其他方法将输入传递给正在运行的脚本?

您提到的方法是在发出命令/脚本时将文件重定向到stdin的常规方法

如果你能详细说明你正在寻找的“另一种方式”,也许会有所帮助,比如,为什么你甚至需要一种不同的方式来实现呢?您是否需要执行此方法不允许的任何操作?

您可以执行以下操作:

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

如果要直接在脚本中提供输入数据,请使用here文档:

    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
test/e$NUMBER>test/e$NUMBER.out
如果[$NUMBER=“4”];然后
然后

test/e$NUMBER>test/e$NUMBER.out抱歉,我想我是在想
expect
之类的东西,但不确定如何有条件地在shell脚本中执行。