2016-07-16 13 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 

$ 

は今、私は、スクリプトの

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

実行が

./run ./my_tool input.txt 
のようなものになりますがありますファイル、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$linestdinとしてプログラムに渡すので、stdinバッファ(ユーザ入力を読み込む)はデータで埋められ、プログラムは "input"を読み込みます。 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

おかげで、私は '$ライン取得しています::のための最後の行にそのようなファイルやdirectory':入力ファイルと'出口各行の曖昧redirect'を実行し、それを使用するには

'exit'。私は何か間違っているのですか? –

+0

私のためにbashでこれはうまくいきます... – Nidhoegger

+0

最後の行を 'done <<<" $ 2 "'に変更することは私のために働いています。それはここで適切なことですか? –

関連する問題