从bash脚本将字符串推入cin(C ++程序)

时间:2019-05-11 20:33:40

标签: c++ bash shell

这应该是一个简单的问题,但是我还没有找到合适的答案。

在我编写的程序中,我通过以下方式从用户那里获得一条线:

std::string str;
std::getline(std::cin, str);

这是我在程序中获得的唯一输入。

我需要编写一个bash脚本来测试一些用户输入,但是我不确定如何将脚本中指定的字符串推送到我的程序中,因此我的程序将字符串视为在命令行中输入的字符串。

脚本看起来像:

#!/bin/sh

echo "running test"

//somehow direct string specified here into my program 

有人可以帮我指出正确的方向吗?

2 个答案:

答案 0 :(得分:1)

使用外壳程序pipeline

echo "some input" | ./myprogram

通常,当您运行./myprogram时,其标准输入连接到tty(终端)。

在外壳中使用管道时,它会将程序的标准输入连接到先前程序的标准输出

由于默认情况下echo包含换行符,因此您的程序将看到

some input\n

后跟文件结尾。

答案 1 :(得分:1)

除了管道选项外,您还可以使用此处文档:

./myprogram <<EOF-MARKER
some input
EOF-MARKER

请注意,您可以通过这种方式发送多行(所有内容都取决于文件末尾的标记字符串)。

如果您实际上是在使用bash(不是某些brand-X外壳程序),则可以使用here字符串(请注意,使用三重字符{<而不是double字符):

./myprogram <<<"some input"