linux – 使用bash捕获交互式程序的输出和输入
发布时间:2020-12-13 22:59:22 所属栏目:Linux 来源:网络整理
导读:我正在使用bash自动化交互式命令行 Java程序来验证程序是否为输入生成了正确的输出(基本上是穷人在bash中的单元测试). 例如,如果我有一个java程序要求用户输入他们的全名,然后只输出他们的名字,它应该是这样的: Enter your name: John DoeJohn 用户输入“Jo
我正在使用bash自动化交互式命令行
Java程序来验证程序是否为输入生成了正确的输出(基本上是穷人在bash中的单元测试).
例如,如果我有一个java程序要求用户输入他们的全名,然后只输出他们的名字,它应该是这样的: Enter your name: John Doe John 用户输入“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 Doe John 但我可以忍受这个: Enter your name: John (输入完全省略,但输出在新行上,如预期的那样) 在bash中是否存在一种方法(不改变底层的java程序)以获取被传递给stdin的文本,以便在java程序读取的“时间”内输出到stdout,从而捕获完整的交互式会话? (还有一点注意:有些搜索表明spawn / expect命令可能会有所帮助,但是这个运行的系统似乎没有它们可用) 解决方法
您可以使用脚本命令
script -q -c "java NameReader" log.txt 这将在log.txt文件中记录java NameReader命令的输入和输出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |