2016-04-18 6 views
-1

私のJavaファイルとは別のディレクトリにシェルスクリプトがあります。このスクリプトには、現在のディレクトリにファイルを出力するのはlsのみです。私はjavaプロジェクトを実行すると、シェルスクリプトのルートではなくjavaプロジェクトのルートにあるファイルを出力します。シェルスクリプトのルートにあるファイルを出力したい。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を使用して、あなたはおそらくあなたは、あなたが見たいと思うディレクトリにProcessBuilderインスタンスの作業ディレクトリを設定する必要があり

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

おかげでバディ。これは動作します 私は3行目を次のように置き換えました: pb.directory(new File(path).getParentFile()); –

1

をしたいです。方法はdirectory(File directory)です。 Javadoc of ProcessBuilder

pb.start()の前に、Fileを定義してProcessBuilderのインスタンスに割り当てます。

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

簡単な解決策:コマンドlsは複数の引数で実行できます。そのうちの1つはディレクトリでもよいファイル引数です。 から

# List the contents of your home directory 
$ ls ~ 

このように、ちょうどあなたのシェルスクリプトあなたはハードあなたのJavaコードにコード化されたディレクトリパス:"/home/omar/ros_ws/"をして$1を経由して、あなたのシェルスクリプトでアクセス。

だからあなたのシェルスクリプトは次のようになります。

#!/bin/bash 
ls $1 

を介して、そしてJavaからあなたのシェルスクリプトを呼び出します。

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