2012-04-10 18 views
0

我在寫一個Java程序MyAwesomeProgram,它使用Process'exec函數在本地運行bash命令。我的代碼位於/ home/a/b/c中,並且位於/ home/a/b/d中的.sh文件需要運行。然而,當我運行代碼:在不同的目錄中使用Java的exec運行.sh文件?

Process p; 
Runtime rt = new Runtime.getRuntime(); 
p = rt.exec("./home/a/b/d/shell.sh"); 
p.waitFor(); 

我收到一個錯誤:

Exception in thread "main" java.io.IOException: Cannot run program "./home/a/b/d/shell.sh": java.io.IOException: error=2, No such file or directory 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) 
at java.lang.Runtime.exec(Runtime.java:593) 
at java.lang.Runtime.exec(Runtime.java:431) 
at java.lang.Runtime.exec(Runtime.java:328) 
at MyAwesomeProgram.main(MyAwesomeProgram.java:186) 
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory 
at java.lang.UNIXProcess.<init>(UNIXProcess.java:148) 
at java.lang.ProcessImpl.start(ProcessImpl.java:65) 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453) 

我相信這僅僅是在格式化exec命令字符串錯誤,但我一直沒能找到迄今爲止的解決方案。我在哪裏搞砸了?任何其他有效使用exec的提示/技巧都會被讚賞,但完全是可選的。謝謝!

編輯:我得到的代碼工作,這是一個問題,一對夫婦目錄引用我倒退以及Woot4Moo說。

+0

/home/a/b/c 

你想要然後在到達你沒有試過嗎??如果你的代碼是從/ home/a/b/c運行的,那麼這就是/home/a/b/c/home/a/b/d/shell.sh – Dan 2012-04-10 18:05:20

+0

後你如何從命令行運行這個。包括你當前的目錄(即/ home/chris) – Woot4Moo 2012-04-10 18:19:07

+0

javac MyAwesomeProgram.java,java MyAwesomeProgram。主要方法包含代碼(這是一個虛擬程序,用於在將其納入更大的已經測試過的程序組之前測試exec功能)。所有必需的東西都已經導入和測試,按預期工作。 – Chris 2012-04-10 18:21:50

回答

3

好,如果你的程序住在:

/home/a/b/c 

和腳本住在:

/home/a/b/d 

並使用.你是不是在正確的目錄。你想用下面的路徑給exec它:

../d/script.sh 

.說,使用當前目錄+您的字符串。因此,在本質您輸入以下內容:

/home/a/b/c/home/a/b/d 

..允許你去了一個目錄當中,如果你是在:

/home/a/b 
+0

我更新了代碼以反映您的建議,並且我得到相同的java.io.IOException,除了「../home/a/b/d/script.sh」,儘管它在終端中手動工作。有什麼想法嗎? – Chris 2012-04-10 18:12:44

+0

該文件的權限是什麼?你在用哪個用戶運行代碼? – Woot4Moo 2012-04-10 18:14:29

+0

權限是755,我有近root權限但不是root。我應該能夠操縱/刪除/ etc所有有問題的文件,所以我不認爲這是一個權限問題。整個代碼只是創建一個Process,Runtime,然後exec調用,所以沒有其他可以離開的東西了。 – Chris 2012-04-10 18:20:11

相關問題