如果我有一个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读取“enter key-press”,我假设应该发生这种情况,因为脚本中的程序输入是由换行符分隔的。在这里,程序被执行但是在文件中产生相同的输出,无论我在EOT之前放置什么,所以它没有像预期的那样被输入到程序中。
答案 0 :(得分:5)
您想要的I / O重定向形式称为here document,并且根本不涉及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
指示的换行符。
答案 1 :(得分:1)
仅供参考,echo
不读取其标准输入(此处文档提供);您可能希望使用cat
代替:
cat <<EOF | ./runme > output
...
...
...
EOF
但这对cat
毫无用处,因为您可以直接将此文档连接到runme
的标准输入,如Thomas Nyman's answer所示。