我有一个在linux上运行的程序
该程序从stdin
获取输入所以我可以用这种方式用输入文件启动它
myprogram < file
为了避免输入程序的输入
现在我希望程序从命令输出中获取输入。类似的东西
myprogram < anycommand
但是这不起作用,因为它期望文件而不是命令。
我怎样才能让它发挥作用?是否有shell语法使其有效?
注意:我不能使用像anycommand | myprogram
答案 0 :(得分:3)
通常(恕我直言) myprogram 对文件一无所知。 bash启动 myprogram 并读取文件,并将 file 的内容写入 myprogram 的标准输入。 所以 myprogram 不应该知道他的stdin是一个文件。 所以, anycommand | myprogram 必须有效。
如果它不能用于灰,也许你可以制作命名管道(mkfifo / tmp / testpipe)
现在,您可以使用myprogram < /tmp/testpipe
启动程序,然后将输入写入 / tmp / testpipe
答案 1 :(得分:0)
答案 2 :(得分:0)
在我的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