我有一個shell腳本文件,我想從java運行。我的java工作空間目錄不同於腳本的目錄。從外部目錄運行Shell腳本:沒有這樣的文件或目錄
private final String scriptPath = "/home/kemallin/Desktop/";
public void cleanCSVScript() {
String script = "clean.sh";
try {
Process awk = new ProcessBuilder(scriptPath + script).start();
awk.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
和我得到這個錯誤:
java.io.IOException: Cannot run program "cat /home/kemallin/Desktop/capture-03.csv | awk -F ',' '{ print $1,",", $2,",", $3,",", $4,",", $6}' > clean.csv": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at ShellScript.cleanCSVScript(ShellScript.java:21)
at Main.main(Main.java:15)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:186)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
... 2 more
java.io.FileNotFoundException: /home/kemallin/Desktop/clean.csv (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at java.io.FileReader.<init>(FileReader.java:58)
at CSVReader.run(CSVReader.java:25)
at Main.main(Main.java:17)
我用Google搜索它,每一個解決方案几乎表明,我做了正確的事情。
我試圖把腳本文件放在src和Java項目的bin中,但它仍然說沒有這樣的文件或目錄。
我到底做錯了什麼?
謝謝。
Java的嘗試運行整個命令行下運行一個命令。字符串「cat/home/...」不是程序,「貓」是,而其餘的是貓的參數。 – 2014-09-03 15:19:41
Marc B可能是對的,我不是一個java人,所以我可能會做的是檢查'/ home/kemallin/Desktop/capture-03.csv'和'/ home/kemallin/Desktop/clean.sh'。確保運行java程序的用戶可以訪問這些文件(a + rwx,如果你只是想放棄權限問題......如果是,那麼你可以從那裏工作) – 2014-09-03 15:27:59
我認爲你的錯誤輸出不符合顯示的java代碼。在Java代碼中,運行的命令應該是「/home/kemallin/Desktop/clean.sh」,但在錯誤輸出中顯示「cat /home/kemallin/Desktop/capture-03.csv | awk ...」和「/home/kemallin/Desktop/clean.csv」:( – Jdamian 2014-09-03 15:42:15