2013-10-02 29 views
0

如果我有一個C++程序在運行期間期望從控制檯輸入到cin,那麼我怎樣才能從shell腳本自動執行此輸入?我還需要將其輸出存儲在一個文件中,但該部分很簡單。我研究了不同的方法,包括將它回顯到/ proc中pid的文件描述符,但似乎沒有任何工作。如何在shell中回顯正在運行的進程?

這是我到目前爲止有:

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

注意,輸入的每一行需要一個「輸入按鍵」可以通過CIN在節目中,我是這樣假設,因爲應該發生讀腳本中的程序輸入以換行符分隔。在這裏,程序得到執行,但在文件中產生相同的輸出,無論我在EOT之前放置什麼,所以它不會按預期輸入到程序的cin中。

回答

5

你想被稱爲here document,不涉及echo在所有的I/O重定向的形式:

./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選項允許解釋反斜槓轉義,例如參數echo中的\n所示的換行符。

+0

謝謝,這工作完美無瑕! – hesson

1

只是供參考,echo不讀取其標準輸入(這是一個這裏的文件提供);您可能需要使用cat代替:

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

但是,這是一個無用的使用cat,因爲你可以連接此文件直接runme的標準輸入如圖Thomas Nyman's answer

相關問題