2017-05-07 30 views
3

我的問題是:我用C語言編寫一個程序,並啓動它,我用來做我可以編寫腳本程序以重複運行來自文本文件的參數嗎?

./program.exe var_1 ... var_n 

其中var_i個都是數值和字符串(作爲文件名)。 我必須讓程序運行多次var_i-th的不同值,每次我必須調用上述命令。

有沒有爲自己準備一個文件.TXT(或類似的東西)的那種

  • ./program.exe VAR_1 ... var_n #configuration一個
  • 的。
  • ./program.exe VAR_1 ... var_n #configurationň

,並作出單一呼叫我得到的所有的配置上運行一個接一個地使用這使程序運行?

感謝

+0

Shell腳本將執行的每一行,就像您在控制檯(MO鍵入它重新或更少)。所以你應該能夠把所有的命令寫在一個文件中,然後執行 - 或者你正在尋找一種方法讓腳本生成所有的配置或類似的東西? –

+0

不是C問題,因此請刪除C標記。 – alk

+0

相關http://stackoverflow.com/q/10929453/694576 – alk

回答

1

您可以每行一個自定義的參數列表準備一個文件,就像這樣:

var_1 
var_2 
var_1 var_3 

那麼這樣一個bash句話會做的工作:

cat myFile.txt | xargs ./program.exe 
+1

我建議:'xargs -n 1 ./program.exe Cyrus

+1

在這個答案中建議的方法不會做OP所要求的 - 它會調用'./program.exe var_1 var_2 var_1 var_3'與您的輸入文件,處理空格和換行符相同。 (我也建議像'cat'一樣開闢,因爲'xargs ./program.exe

+0

@Cyrus,... OP希望能夠在每個調用中傳遞多個參數,所以這也不是很正確。 –

2

要將每行讀入一個字符串數組,並將該數組傳遞給正在運行的程序,可以使用BashFAQ #1中描述的方法:

while read -r -a args; do 
    ./program.exe "${args[@]}" 
done <in.txt 

將讀取來自in.txt的參數,期望它們以空格分隔。它將不會榮譽引號或轉義序列作爲語法上有意義的。


需要注意的是,如果你的文件包含:

arg1 "argument two" 13 

你會得到:

./program.exe 'arg1' '"argument' 'two"' '13' 

...共參數。


如果您需要報價兌現,那麼我們又回到使用xargs的空間,但每輸入線一次調用:

while read -r line; do 
    xargs ./program.exe <<<"$line" 
done <in.txt 
2

創建一個文本文件(foo.sh,如)與此內容,使其可執行(chmod u+x foo.sh)並運行它與./foo.sh

#/bin/bash 

/program.exe var_1 ... var_1 #configuration one 
/program.exe var_1 ... var_2 #configuration two 
/program.exe var_1 ... var_3 #configuration three 
. 
. 
. 
./program.exe var_1 ... var_n #configuration N 
相關問題