我有一个在 linux 上运行的程序
该程序从标准输入获取输入
所以我可以用这种方式用输入文件启动它
myprogram < file
为了避免在程序中输入输入
现在我希望程序从命令输出中获取输入。类似的东西
myprogram < anycommand
但这不起作用,因为它需要一个文件而不是命令。
我怎样才能使它工作?是否有外壳语法可以使其工作?
注意:我不能像这样使用管道anycommand | myprogram
通常(恕我直言)myprogram对文件一无所知。bash 启动myprogram并读取文件,并将文件内容写入myprogram的标准输入。所以myprogram应该不知道他的stdin是一个文件。所以,任何命令 | 我的程序必须工作。
如果它不适用于 ash,也许你可以创建一个命名管道 (mkfifo /tmp/testpipe) 现在你可以启动你的程序,myprogram < /tmp/testpipe
你可以将你的输入写入/tmp/testpipe
在我的 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