2016-05-29 18 views
0

私はいくつかのbashスクリプトを実行し、ターミナル出力を文字列に格納するためにjavaを使用しようとしました。しかし、多くのコマンドがこのように動作しません。それはコマンドが見つからないことを示し続けるが、私はこれらのコマンドをターミナルで正しく実行することができる、ex node --version、go --version。私はパスの問題だと思うが、それを修正する方法は考えていない。java実行bashスクリプト、コマンドが見つかりません

「python --version」を実行すると「Python 2.7.10」が表示されますが、getErrorStreamに表示されます。誰も私にいくつかのヒントを与えることができますか?

public static void runscript() throws IOException { 
    Runtime rt = Runtime.getRuntime(); 
    String[] commands = { "/bin/bash", "-c", "node --version" }; 
    Process proc = null; 
    try { 
     proc = rt.exec(commands); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream())); 

    BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream())); 

    // read the output from the command 
    System.out.println("Here is the standard output of the command:\n"); 
    String s = null; 
    while ((s = stdInput.readLine()) != null) { 
     System.out.println(s); 
    } 

    // read any errors from the attempted command 
    System.out.println("Here is the standard error of the command (if any):\n"); 
    while ((s = stdError.readLine()) != null) { 
     System.out.println(s); 
    } 
} 
+0

あなたが名前だけでなく、コマンドのフルパスを与えて試すことができます。 "どのノード"があなたにパスを与えますか?あなたのJavaコードでそれを使ってみてください。また、端末からの差異を見るためにjavaから$ PATHをエコーする価値があります。 –

+0

"getErrorStream"について:あなたが知っているように、プログラムが情報の印刷に使うかもしれない2つのストリームがあります。プログラム自体がどちらを使用するかを決定します。何を印刷するかについての公式なガイダンスはかなりありますが、これはしばしば正確には処理されません。あなたのケースでは、Pythonは明らかにそれを行います... – EagleRainbow

+0

@VishalKamat私は以下でそれを返信します。素晴らしいと役に立つコメントありがとう! – user3390980

答えて

0

返信@VishalKamatコメント。
「/ usr/local/bin/node」のパスとして「どのノード」の出力を使用しようとしました。できます!!!
しかし、異なるアプリケーションバージョン情報を取得する必要があるときにパスを変更する必要がありますか? 端末のように簡単に情報を得ることができると思いました。

私は

String[] commands = { "/bin/bash","-c", "$PATH" }; 

この方法でJavaによる印刷の$ PATHにしようと、エラーmsgがある:

/bin/bash: /usr/bin:/bin:/usr/sbin:/sbin: No such file or directory 
+0

コマンドは、値を出力するために "echo $ PATH"です。 –

関連する問題