簡體   English   中英

用`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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM