如何回显shell中的运行进程?

时间:2013-10-02 02:32:07

标签: bash shell process

如果我有一个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之前放置什么,所以它没有像预期的那样被输入到程序中。

2 个答案:

答案 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所示。