如何在没有单独文件的情况下为程序提供stdin?

时间:2014-10-20 01:06:56

标签: bash command-line-arguments

我有一个程序,但我无法访问代码。该程序读取标准输入。典型的调用看起来像这样 -

> ./.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&lt; argsfile.in

我想在不使用文件的情况下做同样的事情,就像这样 -

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

我该怎么做?

1 个答案:

答案 0 :(得分: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[@]}")"