gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:20:50 25 4
gpt4 key购买 nike

我正在致力于在 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,所以完整的交互式 session 是被俘虏了?

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

最佳答案

您可以使用脚本命令

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

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

关于linux - 使用 bash 捕获交互式程序的输出和输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37305963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com