2014-01-23 27 views
0

我有一個C++程序,它以交互方式從用戶(標準輸入)讀取各種輸入,並且工作正常。但是現在我需要從shell腳本(bash)執行這個程序,並且只需要從這個腳本傳遞這些輸入,而不是手動傳遞給用戶。 我的二進制名稱是myprog,這是我在腳本中試過的..但它不工作。C++程序需要stdin輸入,但我想從shell腳本輸入/發送這些輸入

myprog << \ 
    __EOF__ | tail -n+21 | grep ":" >> logfile.log 2> /dev/null 
    $bdy 
    $bdm 
    $bdd 
    $bth 
    $btm 
    $bts 
    $edy 
    $edm 
    $edd 
    $eth 
    $etm 
    $ets 

EOF

這些變量包含了一些日期和時間,就像一年= 2014月01,小時= 04,分= 59秒= 20

+1

我們需要更多關於您的問題的信息。首先,「它不工作」在這裏從來不給你答案,因爲我們不知道什麼不是特別有效。你的程序的輸入是什麼樣的?你的投入,預期和實際產出是多少? – poljpocket

+0

謝謝。不工作意味着它沒有接受腳本的輸入。在myprog中,我設置了默認值,如果用戶沒有提供任何輸入,只需按ENTER。因此,通過上面提到的命令,myprog只能使用默認值。 – Ritesh

回答

0

你的C++程序無關否則從標準輸入讀取數據(或用於C++的cin)。這是您在bash shell上決定用數據創建一個臨時對象並將其傳遞給運行從C++源代碼編譯的可執行文件的進程。

使用bash腳本這樣

myprog << EOF | tail -n+21 | grep ":" >> logfile.log 2> /dev/null 
foo 
bar 
EOF 

請注意,在最後一行結束指標之間以及<<背後的確切macth。

這裏進一步的例子:

[email protected] ~/Documents 
$ cat fff 
cat << EOF -b | tail >> logfile.log 2>/dev/null 
this text is used 
these chars too 
EOF 

[email protected] ~/Documents 
$ sh ./fff 

[email protected] ~/Documents 
$ cat logfile.log 
    1 this text is used 
    2 these chars too 

[email protected] ~/Documents 

您可能需要檢查你的命令的參數本地,計算什麼,什麼是使用在刪除機器的ssh。上面的例子可能有助於從myprog中分離出問題。

+0

我根據您的輸入修改了命令,但仍然無法使用。我試圖從服務器獲取輸入,所以我嘗試了這樣的事情。 ssh servername myprog << EOF | tail -n + 21 | grep「:」>> logfile.log 2>/dev/null foo bar EOF – Ritesh

+0

是的,它幫助我隔離問題。 – Ritesh