详细地说,我写了一个shell片段,如下所示:
while read input
do
./a.out
done < "$1"
&#34; $ 1和#34;是多行的测试文件。每行都是一个测试用例。
a.out是编译的C ++文件,我的测试用例运行该文件。 C ++源代码是这样的:
while (1) {
cout << "Enter:\n"
if ((cin >> v1) && (cin >> v2)) {
cout << v1 << "\n";
cout << v2 << "\n";
}
}
我们不允许a.out采取这样的参数: ./a.out [参数]
例如,测试文件包含两个测试用例:
"a b"
"c d"
在我的脚本运行后,我的期望是
a
b
c
d
应输出。感谢
答案 0 :(得分:2)
说你的完整代码就是这样:
#include <iostream>
int main() {
int v1, v2;
std::cin >> v1;
std::cin >> v2;
std::cout << "v1: " << v1 << " v2: " << v2 << "\n";
return 0;
}
如果您在脚本中阅读的文件的行如下所示:
4 5
6 7
然后shell脚本循环中的循环可以这样写:
while read input
do
echo "$input" | ./a.out
done < "$1"
运行像./script.sh file
这样的shell脚本会提供以下输出:
v1: 4 v2: 5
v1: 6 v2: 7
答案 1 :(得分:0)
here documents可能有所帮助。它们可以包含变量,您可以填充它们。
另请阅读advanced bash scripting guide
如果您的a.out
可以处理一行,请同时尝试pipes
echo $A $B | a.out
或者可以使用printf(1)代替上面的echo
答案 2 :(得分:0)
如果您的C ++程序需要某种基于文本的交互式交互,那么期望可能是一个不错的选择(参见http://linux.die.net/man/1/expect)。