0

如果我有一个 C++ 程序,它希望在运行时从控制台输入 cin,我如何才能从 shell 脚本自动输入这个输入?我还需要将其输出存储在一个文件中,但这部分很简单。我研究了不同的方法,包括将它回显到 /proc 中 pid 的文件描述符,但似乎没有任何效果。

这是我到目前为止所拥有的:

#!/bin/sh
g++ -o runme source.cpp
echo <<EOT | ./runme > output
expected program input
more expected program input
even more
EOT

请注意,每一行输入都需要程序中的 cin 读取“输入按键”,我假设这应该发生,因为脚本中的程序输入由换行符分隔。在这里,程序被执行,但无论我在 EOT 之前放置了什么,都会在文件中产生相同的输出,因此它没有按预期输入到程序的 cin 中。

4

2 回答 2

5

你想要的I/O重定向形式叫做here文档,完全不涉及echo

./runme <<EOF
expected program input
more expected program input
even more
EOF

使用输出重定向:

./runme <<EOF > output
expected program input
more expected program input
even more
EOF

如果你坚持使用echo,原则上你可以这样做:

echo -e "expected program input\nmoreexpected program input\neven more\n" | ./runme

其中该-e选项启用反斜杠转义的解释,例如\n参数中指示的换行符echo

于 2013-10-02T04:44:12.633 回答
1

仅供参考,echo不会从其标准输入中读取(此处文档提供);你会想cat改用:

cat <<EOF | ./runme > output
...
...
...
EOF

但这是无用的cat,因为您可以直接将此处的文档连接到runme标准输入,如Thomas Nyman 的回答所示。

于 2013-10-02T13:02:59.580 回答