编写一个shell脚本,运行需要输入cin的程序

时间:2014-09-14 14:42:34

标签: shell

详细地说,我写了一个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

应输出。感谢

3 个答案:

答案 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)。