2016-12-13 2 views
0

私はコンソールからうまく動作するいくつかのbashコマンドを実行しようとしていますが、Java内から同じコマンド呼び出しをしようとすると失敗します。コマンドはエラーを戻さず、目的の出力ファイルを生成できません。このコマンドは、PGPツール(GPG)を使用してファイルを復号化し、別のファイルを作成することを想定しています。これは、手動で実行されたときに動作しますが、同じシェル呼び出しを行い、エラーのないJavaアプリケーション内からではありません。シェルコマンドはjavaから失敗しますが、手動で実行すると動作します

ちょうど私がコンテナフォルダにchmod 777を試みたことを確かめるために、私はそのパーミッションの問題を考えていません。

シェルキュータコード(Mkyong.comのCoutesy)

private static String executeCommand(String command) { 

    StringBuffer output = new StringBuffer(); 

    Process p; 
    try { 
     p = Runtime.getRuntime().exec(command); 
     p.waitFor(); 
     BufferedReader reader = 
       new BufferedReader(new InputStreamReader(p.getInputStream())); 

     String line = ""; 
     while ((line = reader.readLine())!= null) { 
      output.append(line + "\n"); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return output.toString(); 

} 

実際のシェルコマンド

gpg --output /main/decrypted-token.txt --passphrase test /main/token.asc 
+0

どこスクリプトがですか?あなたは 'executeCommand()'にどのようなコマンドを送りますか? – Biffen

+0

@Biffen「実際のシェルコマンド」の下の質問の最後に...私がスクリプトを言ったことを忘れてしまった。 .shファイルとしてパッケージ化するか実行するかは、純粋な文字列であるかどうかは同じです。 –

+0

デバッグのヘルプ( '**なぜこのコードは動作しないのですか?**')には、目的の動作、特定の問題またはエラー、およびそれを再現するのに必要な最短コード**を質問自体に含める必要があります**。 **明確な問題文**のない質問は他の読者には役に立たない。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve) – Biffen

答えて

3

コマンドは端末上で正常に動作している場合ではなく、Javaから呼び出します私が最初に試みるのは、呼び出されているコマンドでBashを指定することです。これが動作するかどうかを確認してください:

bash -c "gpg --output /main/decrypted-token.txt --passphrase test /main/token.asc" 

あるいはさらに良い:

/bin/bash -c "gpg --output /main/decrypted-token.txt --passphrase test /main/token.asc" 
関連する問題