![如何使重定向输入计为命令输出](https://linux22.com/image/1394168/%E5%A6%82%E4%BD%95%E4%BD%BF%E9%87%8D%E5%AE%9A%E5%90%91%E8%BE%93%E5%85%A5%E8%AE%A1%E4%B8%BA%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA.png)
我有一个简单的 C 控制台程序,它接受一些键盘输入并输出提示和计算。我还有两个文本文件:一个包含程序输入的文件,另一个包含程序应给出的输出的文件。
问题是
$ c_program < input_file > output_file
不会将输入回显到输出文件。output_file 将只包含提示和计算,而不包含重定向的输入。如何使输入与输出相吻合,以便输出文件看起来就像使用键盘输入时一样?
例如,这是一个示例会话:
Input number of feet traveled: 5
Input number of seconds: 2.5
Average speed is 2.0 feet per second
但是当重定向输入和输出时,我们得到:
Input number of feet traveled: Input number of seconds: Average speed is 2.0 feet per second
我怎样才能使第二个看起来像第一个?
答案1
为了编写与程序的交互脚本并按正确的顺序捕获交互,您可能需要查看比输入和输出重定向更高级的工具。
例如,使用期望(1)你可以像这样编写你的交互脚本:
#!/usr/bin/expect
spawn "./c_program"
expect "Input number of feet traveled: "
send "5\r"
expect "Input number of seconds: "
send "2.5\r"
expect eof
当您执行脚本时,您将获得整个自动交互的记录。