2012-03-23 5 views
0

私はcygwinを使用してWindows上でUNIX環境を取得しています。cygwinを使用してWindows環境でrSyncを内部的に使用するUNIXシェルスクリプトをjavaで実行する方法

cygwinで動作していて、同期作業などを実行するシェルスクリプトがあります。私はこれらのスクリプトをjavaコードで実行したい。

また、cygwin上でスクリプトを実行しているときに、単純なechoコマンドを使用して特定の情報が端末に表示されます。私はすべての情報を自分のアプリケーションに表示したいと思います。

どうすればいいですか?

答えて

1

Runtimeクラスを使用してCygwinを実行します。これは非常に脆く、そしてセットアップに依存しているが、私のマシン上で、私はどうなる:

Runtime r = Runtime.getRuntime(); 
Process p = r.exec("C:\\dev\\cygwin\\bin\\mintty.exe --exec /cygpath/to/foo.sh"); 

は、完全な、そしてそれへのハンドルを取得するためにProcessのを待つことはstdoutに送信されたかを確認するためのInputStreamオブジェクトだとstderror。

コマンドの最初の部分はcygwinを実行し、もう1つは何らかのスクリプトまたはコマンド(-eまたは--execを使用)を実行することです。 DOSプロンプトでこのコマンドをテストして、コードを削除する前に最初に動作するかどうかを確認します。また、利用可能なオプションを見てみましょう:

C:\dev\cygwin\bin\mintty.exe --help 

また、DOSプロンプトから。

EDIT:それは--execと協力を得るように見えることはできません私のために、次の作品は、残念ながら、バージョン情報

 

public class RuntimeFun { 
    public static void main(String[] args) throws Exception { 
     Runtime r = Runtime.getRuntime(); 
     Process p = r.exec("C:\\dev\\cygwin\\bin\\mintty.exe --version"); 
     p.waitFor(); 

     BufferedReader buf = new BufferedReader(
       new InputStreamReader(
         p.getInputStream())); 
     String line = buf.readLine(); 
     while (line != null) { 
      System.out.println(line); 
      line = buf.readLine(); 
     } 
    } 
} 
 

を印刷するので、あなたはそこにいくつかのより多くの研究を行う必要があるとしています。

+0

cygwinにmintty.exeがありません。 – dhroove

+0

あなたのバージョンに相当するものを見つけてください。私のデスクトップ上のCygwinのショートカットのプロパティを調べるのに1分かかりました。これが、私がこのアプローチが「脆い」と言った理由です。個々のマシン設定に大きく依存しています。 – Jon

0

あなたはこの

String cmd = "ls -al"; 
Runtime run = Runtime.getRuntime(); 
Process pr = run.exec(cmd); 
pr.waitFor(); 
BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
String line = ""; 
while ((line=buf.readLine())!=null) { 
    System.out.println(line); 
} 

P.S.のようなものを使用することができますこれはエラーを処理しません

+0

Windows環境でUNIXスクリプトを実行するためにcygwinのbashシェルをロードする必要はありません。 – dhroove

関連する問題