ProcessBuilder执行bash脚本
我正在嘗試從Java執行bash腳本,它返回錯誤/ bin / bash:’/ home / nika / NetBeansProjects / Parallel Framework / process-executor.sh’:沒有這樣的文件或目錄,我正在使用ubuntu使用netbeans8& 14.04 jdk8.
這是我的代碼:
public class Process { public static void main(String[] args) {try {ProcessBuilder pb = null;Process p;String cmd2 = "";String workingDir = System.getProperty("user.dir");System.out.println(""+workingDir);String scriptloc="'"+workingDir+"/process-executor.sh'";String cmd[] = {"/bin/bash",scriptloc , "workspace/ForDemo.java", "ForDemo.java", "ForDemo"};for (int i = 0; i <= cmd.length-1; i++) {cmd2 += " "+cmd[i];}System.out.println("" + cmd2);pb = new ProcessBuilder(cmd);pb.directory(new File(workingDir));p = null;try {p = pb.start();} catch (IOException ex) {Logger.getLogger(Process.class.getName()).log(Level.SEVERE, null, ex);}BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));// read the output from the commandSystem.out.println("Here is the standard output of the command: ");String s = null;String output = "";while ((s = stdInput.readLine()) != null) {System.out.println(s);}output = "";// read any errors from the attempted commandSystem.out.println("Here is the standard error of the command (if any): ");while ((s = stdError.readLine()) != null) {System.out.println(s);}} catch (IOException ex) {Logger.getLogger(Process.class.getName()).log(Level.SEVERE, null, ex);} } }但是當我從終端執行此命令時,它會執行腳本
 ?bin / bash’/ home / nika / NetBeansProjects / Parallel Framework / process-executor.sh’工作區/ForDemo.java ForDemo.java ForDemo
我的腳本存在另一個問題,它不執行cd命令,并顯示“ / home / nika / NetBeansProjects / Parallel Framework / workspace / ForDemo.java /”:沒有這樣的文件或目錄
我腳本的內容是
#!/bin/bash PATH=/bin:/usr/bin:/usr/local/binWORK=${PWD}/workspace/echo "'${WORK}${2}'"cd "'${WORK}${2}/'"javac $2 java $3 echo "$3"我的目錄層次結構就像
-并行框架
 ???-process-executor.sh
 ???-工作區
 ??????-ForDemo.java(目錄)
 ??????????—- ForDemo.java
最佳答案
在這種情況下,請不要在腳本的路徑中使用單引號. e.像這樣修復您的scriptloc變量:
String scriptloc= workingDir + "/process-executor.sh";如果要在命令行中執行此命令(以轉義路徑中的空格字符),則必須使用單引號,但在這種情況下則沒有必要,因為您已經在cmd []數組中隱式指定該路徑只是一個“單元”
總結
以上是生活随笔為你收集整理的ProcessBuilder执行bash脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Encapsulate Downcast
- 下一篇: 同步锁 php,python线程中同步锁
