Linux Shell脚本:如何从控制台读取程序的标准输出

Linux Shell脚本:如何从控制台读取程序的标准输出,linux,bash,shell,unix,sh,Linux,Bash,Shell,Unix,Sh,我正在尝试编写一个shell脚本,它为程序提供不同的输入,并检查输出是否为预期结果。在这些测试的最后,我决定在我的可执行程序中是否有bug 我使用/my_program arg1 arg2(arg1和arg2是我的程序的命令行参数)在shell脚本上运行我的程序。之后,脚本shell不断地向my_程序提供不同的输入,以便对其进行测试,并且在控制终端(或控制台)时,标准输出被反复编写如下: Connection established. Intermediate result is expecte

我正在尝试编写一个shell脚本,它为程序提供不同的输入,并检查输出是否为预期结果。在这些测试的最后,我决定在我的可执行程序中是否有bug

我使用
/my_program arg1 arg2
(arg1和arg2是我的程序的命令行参数)在shell脚本上运行我的程序。之后,脚本shell不断地向
my_程序
提供不同的输入,以便对其进行测试,并且在控制终端(或控制台)时,标准输出被反复编写如下:

Connection established.
Intermediate result is expected_intermediate_result1
Final result is expected_result1
Connection established.
Intermediate result is expected_intermediate_result2
Final result is expected_result2
事情还在继续。对于每个输入,其输出是已知的。所以他们以前是匹配的

连接失败时:连接中写入
错误
或者结果可能是错误的:

Connection established.
Intermediate result is result1
Final result is wrong_result1
除了提供输入,脚本还有另一个用途:检查结果

所以我想从控制台读取输出,并将其与预期结果进行比较,以确定存在不一致的情况

我需要您的帮助来编辑此代码:

while read console line-by-line
if the line is other than expected result
store this case to text file
done
一些注意事项: 我不想使用
expect
。我只想读取在控制台中编写的程序的输出。我不使用日志文件,因此不会使用文件(
grep
)中的搜索


谢谢你的帮助

这就是你想要做的吗

./my_program arg1 arg2  |
grep -Fxq "Final result is expected_result1" || { printf 'Failed: "arg1 arg2" -> "expected_result1"\n'; exit 1; }

如果没有,请编辑您的问题以澄清您的需求,并提供一个更具体的示例。

为什么不使用expect?这正是它的目的。作业什么的?这不是作业。据我所知,为了使用expect,我应该下载一个库。出于安全问题,禁止将任何内容下载到我工作的计算机上。如果expect是唯一的解决方案,那么我必须使用expect并找到使用它的方法。所以让我知道:)