0

実行時にコンソールから cin への入力を期待する C++ プログラムがある場合、シェル スクリプトからこの入力を自動化するにはどうすればよいですか? 出力をファイルに保存する必要もありますが、その部分は簡単です。/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 キーを押す」必要があることに注意してください。これは、スクリプト内のプログラム入力が改行で区切られているため、発生するはずです。ここでは、プログラムが実行されますが、EOT の前に何を置いたかに関係なく、ファイルに同じ出力が生成されるため、期待どおりにプログラムの cin に入力されません。

4

2 に答える 2

5

必要な I/O リダイレクションの形式はヒア ドキュメントと呼ばれ、次のことはまったく関係ありません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によって示される改行など、バックスラッシュ エスケープの解釈を有効にします。\necho

于 2013-10-02T04:44:12.633 に答える
1

参考echoまでに、標準入力(ヒアドキュメントが提供する)からは読み取りません。cat代わりに使用したいでしょう:

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

ただし、 Thomas Nyman の answerで示されているように、ヒア ドキュメントを の標準入力に直接cat接続できるため、これは の役に立たない使用法です。runme

于 2013-10-02T13:02:59.580 に答える