linux – 使用bash捕获交互式程序的输出和输入

linux – 使用bash捕获交互式程序的输出和输入,第1张

概述我正在使用bash自动化交互式命令行 Java程序来验证程序是否为输入生成了正确的输出(基本上是穷人在bash中的单元测试). 例如,如果我有一个java程序要求用户输入他们的全名,然后只输出他们的名字,它应该是这样的: Enter your name: John DoeJohn 用户输入“John Doe”的地方. 运行此命令的简单bash命令可能如下所示: OUTPUT=`echo "Joh 我正在使用bash自动化交互式命令行 Java程序来验证程序是否为输入生成了正确的输出(基本上是穷人在bash中的单元测试).

例如,如果我有一个java程序要求用户输入他们的全名,然后只输出他们的名字,它应该是这样的:

Enter your name: John DoeJohn

用户输入“John Doe”的地方.

运行此命令的简单bash命令可能如下所示:

OUTPUT=`echo "John Doe" | java nameReader`

要么

OUTPUT=`java nameReader <<< "John Doe"`

这两个问题都是$OUTPUT现在包含以下内容:

Enter your name: John

因为发送到stdin的文本(及其附带的换行符)不会在程序的输出中再现,就像我们在控制台中看到它一样.

理想情况下,$OUTPUT将包含:

Enter your name: John DoeJohn

但我可以忍受这个:

Enter your name: John

(输入完全省略,但输出在新行上,如预期的那样)

在bash中是否存在一种方法(不改变底层的java程序)以获取被传递给stdin的文本,以便在java程序读取的“时间”内输出到stdout,从而捕获完整的交互式会话?

(还有一点注意:有些搜索表明spawn / expect命令可能会有所帮助,但是这个运行的系统似乎没有它们可用)

解决方法 您可以使用脚本命令

script -q -c "java nameReader" log.txt

这将在log.txt文件中记录java nameReader命令的输入和输出.

总结

以上是内存溢出为你收集整理的linux – 使用bash捕获交互式程序的输出和输入全部内容,希望文章能够帮你解决linux – 使用bash捕获交互式程序的输出和输入所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1018233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存