use*_*189 5 java perl pipe eof
Perl通过STDIN接受一个scipt.按下CTRL-D后,perl知道"脚本结束".执行此操作后,将执行该脚本.
现在我的问题是:我想从Java那里做到这一点.
proc = Runtime.getRuntime().exec("perl", env);
commandChannel = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
responseChannel = new BufferedReader(new InputStreamReader(proc.getInputStream()));
InputStreamReader mymacro = new InputStreamReader(getClass().getResourceAsStream("macro.perl"));
char[] b = new char[1024];
int read;
try
{
while ((read = mymacro.read(b)) != -1)
{
commandChannel.write(b, 0, read);
}
commandChannel.flush();
PERL IS WAITING FOR END OF SCRIPT; ??
} ...
Run Code Online (Sandbox Code Playgroud)
但这正是 CTRL-D 的作用:关闭进程的 STDIN。因此,在您的情况下,关闭 proc.getInputStream() 是在 shell 中模拟时获得预期行为的适当操作。
如果你想做“别的事”,就去做吧。就像通过 STDIN 向脚本写入特殊命令一样,然后将其解释为另一种状态或所需的任何状态