2014-10-20 94 views
0

我有一個程序,但我沒有訪問代碼。該程序讀取stdin。一個典型的調用看起來是這樣的 -如何在沒有單獨文件的情況下爲程序提供stdin?

> ./.prog 
> input-1: <I give input-1> 
> input-2: <I give input-2> 
. 
. 
. 
> input-n: <I give input-n> 
> output 

我在做什麼,現在是把所有的爭論在一個名爲argsfile.in文件,內容是這樣的 -

input-1 
input-1 
... 
input-n 

,並稱之爲 -

./prog < argsfile.in

我想做同樣的事情,而無需使用一個文件,這樣的事情 -

>./prog < "input-1" "input_2" ... "input-3"

我該怎麼辦呢?

回答

3

簡單的解決辦法是"here document"

./prog <<"END" 
input-1 
input-2 
input-3 
... 
END 

您可以使用任何字符串代替END。如果要在輸入中包含參數擴展等,請使用END而不是"END"

bash,你也可以使用一個"here string"

./prog <<< $'input-1\ninput-2\ninput-3' 

隨着printf和命令替換的幫助下,你可以讓更多的可讀性:

./prog <<< "$(printf %s\\n "input-1" "input-2" "input-3")" 

該版本是方便,如果你在陣列中有各種輸入線路,例如:

./prog <<< "$(printf %s\\n "${files[@]}")" 
相關問題