使用 `java.lang.ProcessBuilder` 执行 shell 命令
Execute shell command with `java.lang.ProcessBuilder`
我在 CFML 中编写了以下执行 shell 命令的小脚本,我的问题是输出,只要输出是单行就可以,如果是多行我只能得到第一行,我试图在脚本上做一个 while 循环(在代码上注释)但不起作用并且 Java 抛出内存错误 java.lang.OutOfMemoryError: Java heap space
。我能做什么?
<cfscript>
str = ":>exec uname";
exec_init=str.split(":>exec ");
exec=exec_init[2].split(" ");
p = createObject("java","java.lang.ProcessBuilder").init(exec).start();
i = createObject("java","java.io.InputStreamReader").init(p.getInputStream());
br = createObject("java","java.io.BufferedReader").init(i);
line=br.readLine();
//while (isDefined("line")) {
//writeoutput(line);
//}
br.close();
i.close();
</cfscript>
<cfdump var="#line#">
输出:
Linux
如果我发出像
这样的命令
ls
使用多行输出我得到例如
README.TXT
改为:
README.TXT VERSION.txt _-Railo-Getting-Started-_.html bin etc jre lib license-eplv10-aslv20.html modules notice.html resources start start.d start.ini start.jar stop webapps
发现问题,我需要在我的循环中再次添加 line = br.readLine();
。工作代码:
<cfscript>
str = ":>exec ls -al";
exec_init=str.split(":>exec ");
exec=exec_init[2].split(" ");
p = createObject("java","java.lang.ProcessBuilder").init(exec).start();
i = createObject("java","java.io.InputStreamReader").init(p.getInputStream());
br = createObject("java","java.io.BufferedReader").init(i);
line = br.readLine();
while (isDefined("line")) {
writeoutput(line);
line = br.readLine();
}
br.close();
i.close();
</cfscript>
我在 CFML 中编写了以下执行 shell 命令的小脚本,我的问题是输出,只要输出是单行就可以,如果是多行我只能得到第一行,我试图在脚本上做一个 while 循环(在代码上注释)但不起作用并且 Java 抛出内存错误 java.lang.OutOfMemoryError: Java heap space
。我能做什么?
<cfscript>
str = ":>exec uname";
exec_init=str.split(":>exec ");
exec=exec_init[2].split(" ");
p = createObject("java","java.lang.ProcessBuilder").init(exec).start();
i = createObject("java","java.io.InputStreamReader").init(p.getInputStream());
br = createObject("java","java.io.BufferedReader").init(i);
line=br.readLine();
//while (isDefined("line")) {
//writeoutput(line);
//}
br.close();
i.close();
</cfscript>
<cfdump var="#line#">
输出:
Linux
如果我发出像
这样的命令ls
使用多行输出我得到例如
README.TXT
改为:
README.TXT VERSION.txt _-Railo-Getting-Started-_.html bin etc jre lib license-eplv10-aslv20.html modules notice.html resources start start.d start.ini start.jar stop webapps
发现问题,我需要在我的循环中再次添加 line = br.readLine();
。工作代码:
<cfscript>
str = ":>exec ls -al";
exec_init=str.split(":>exec ");
exec=exec_init[2].split(" ");
p = createObject("java","java.lang.ProcessBuilder").init(exec).start();
i = createObject("java","java.io.InputStreamReader").init(p.getInputStream());
br = createObject("java","java.io.BufferedReader").init(i);
line = br.readLine();
while (isDefined("line")) {
writeoutput(line);
line = br.readLine();
}
br.close();
i.close();
</cfscript>