2016-04-18 45 views
-1

我有一個與我的java文件不同的目錄下的shell腳本。該腳本僅包含打印當前目錄中的文件的ls。當我運行java項目時,它將打印java項目根目錄中的文件,而不是shell腳本的根目錄。我希望它在shell腳本的根目錄下打印文件。使用java從其自己的根目錄運行.sh腳本

Java代碼:

ProcessBuilder pb = new ProcessBuilder("/home/omar/ros_ws/baxter3.sh"); 
Process p = pb.start(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 

String line = null; 
while ((line = reader.readLine()) != null) { 
    System.out.println(line); 
} 

回答

0

使用ProcessBuilder.directory,你可能想

String path = "/home/omar/ros_ws/baxter3.sh"; 
ProcessBuilder pb = new ProcessBuilder(path); 
pb.directory(new File(path).getParent()); 
+0

謝謝哥們。這工作 我剛剛取代了第三行: pb.directory(new File(path).getParentFile()); –

1

然後,您應該將ProcessBuilder實例的工作目錄設置爲你想要觀看的目錄。你可以使用它的方法directory(File directory)。 請參閱Javadoc of ProcessBuilder

pb.start()之前,爲您的目錄定義一個文件並將其分配給ProcessBuilder的實例。

 File myDir = new File("/home/omar/ros_ws"); 
     pb.directory(myDir); 
     pb.start(); 
0

一個簡單的解決方案:命令ls可以運行多個參數。其中之一是可以是目錄的文件參數。

從:

# List the contents of your home directory 
$ ls ~ 

因此,只是通過你的shell腳本,你在Java代碼中有硬編碼的目錄:"/home/omar/ros_ws/"和訪問它在你的shell腳本通過$1

所以,你的shell腳本看起來像:

#!/bin/bash 
ls $1 

,並通過從Java調用你的shell腳本:

ProcessBuilder pb = new ProcessBuilder("/home/omar/ros_ws/baxter3.sh /home/omar/ros_ws/"); 
// other code omitted for brevity