如何使用命令的输出作为linux中其他程序的输入?

时间:2014-04-29 09:54:32

标签: linux shell ash

我有一个在linux上运行的程序

该程序从stdin

获取输入

所以我可以用这种方式用输入文件启动它

myprogram < file

为了避免输入程序的输入

现在我希望程序从命令输出中获取输入。类似的东西

myprogram < anycommand

但是这不起作用,因为它期望文件而不是命令。

我怎样才能让它发挥作用?是否有shell语法使其有效?

注意:我不能使用像anycommand | myprogram

这样的管道

3 个答案:

答案 0 :(得分:3)

通常(恕我直言) myprogram 文件一无所知。 bash启动 myprogram 并读取文件,并将 file 的内容写入 myprogram 的标准输入。 所以 myprogram 不应该知道他的stdin是一个文件。 所以, anycommand | myprogram 必须有效。

如果它不能用于灰,也许你可以制作命名管道(mkfifo / tmp / testpipe) 现在,您可以使用myprogram < /tmp/testpipe启动程序,然后将输入写入 / tmp / testpipe

答案 1 :(得分:0)

您需要像这样使用它:

myprogram < <(anycommand)

这称为process substitution

答案 2 :(得分:0)

在我的Linux系统上,ashdash的符号链接,可以很好地处理管道:

pax> ls -ld $(which ash)
lrwxrwxrwx 1 root root 4 Mar  1  2012 /bin/ash -> dash

pax> ash

$ echo hello | tr '[a-z]' '[A-Z]'
HELLO

所以为了以防万一,我会给anycommand | myprogram另一个镜头。

如果您的ash具有管道功能,您始终可以恢复使用临时文件,前提是anycommand不是您需要处理的长期过程以递增的方式输出:

anycommand >/tmp/tempfile
myprogram </tmp/tempfile