![](/img/trans.png)
[英]Execute shell commands with arguments with `java.lang.ProcessBuilder`
[英]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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.