0

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

该程序从标准输入获取输入

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

myprogram < file

为了避免在程序中输入输入

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

myprogram < anycommand

但这不起作用,因为它需要一个文件而不是命令。

我怎样才能使它工作?是否有外壳语法可以使其工作?

注意:我不能像这样使用管道anycommand | myprogram

4

3 回答 3

3

通常(恕我直言)myprogram对文件一无所知。bash 启动myprogram并读取文件,并将文件内容写入myprogram标准输入。所以myprogram应该不知道他的stdin是一个文件。所以,任何命令 | 我的程序必须工作。

如果它不适用于 ash,也许你可以创建一个命名管道 (mkfifo /tmp/testpipe) 现在你可以启动你的程序,myprogram < /tmp/testpipe你可以将你的输入写入/tmp/testpipe

于 2014-04-29T10:30:22.820 回答
1

在我的 Linux 系统上,ash是一个符号链接,dash可以很好地处理管道:

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
于 2014-04-29T10:10:12.547 回答
0

你需要像这样使用它:

myprogram < <(anycommand)

这称为进程替换

于 2014-04-29T09:55:17.197 回答