2014-10-20 50 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[@]}")" 
相关问题