2016-07-16 44 views
0

我是新手腳本編寫者。在嘗試執行以下操作時遇到問題。請幫忙。從C++程序的文件中讀取用戶命令的腳本

我的C++程序在while循環中運行,在提示符下接收用戶的命令並執行它們。我想讓這個過程自動化。

樣品執行

$ ./my_tool 

my_prompt> command1 arg1 arg2 

result: abc 

my_prompt> command2 arg3 

result: xyz 

my_prompt> command3 abc xyz 

result: my_result 

my_prompt> exit 

$ 

現在,我想有一個文件,input.txt中,這將有腳本的

command1 arg1 arg2 
command2 arg3 
command3 <abc> <xyz> 
exit 

執行將會像

./run ./my_tool input.txt 

如何編寫一個簡單的bash腳本來實現這個目標?我將至少有20條命令。

如果我沒有command3,也就是說,所有的輸入參數都是預先確定的,那我該怎麼辦?

對不起,如果這很簡單 - 我無法弄清楚。

感謝和問候, SB

回答

0

您可以通過在線傳遞文件行二進制作爲標準輸入:

#!/bin/bash 

while IFS='' read -r line || [[ -n "$line" ]]; do 
    eval $1 < $line 
done <<< "$2" 

快速的解釋: IFS的事情將確保該文件將被讀取一行一行,否則它會在每個空格上創建一個新的迭代。 ./my_tool < $line行會將$line作爲stdin傳遞給你的程序,所以stdin緩衝區(你將讀取用戶輸入的地方)中充滿了數據,所以你的程序讀取「輸入」。 done < "$2"會將第一個參數作爲文件傳遞給while循環輸入,其中read將讀取輸入。 $2將是您在執行時傳遞腳本的文件名。 eval $1將運行存儲在該腳本的第一個參數$1中的命令。

要使用它,運行:

chmod +x myscript.sh # you need to do this only once 
./myscript.sh ./my_tool input.txt 
+0

謝謝,但我正在逐漸'$行:曖昧redirect'輸入文件和'退出的每一行:在最後一行沒有這樣的文件或directory' 'exit'。難道我做錯了什麼? –

+0

對於我在bash中這是工作正常... – Nidhoegger

+0

改變最後一行爲'完成<<<「$ 2」'正在爲我工​​作。這是否適合做這件事? –

相關問題