2017-08-01 8 views
0

私は、UNIXボックスにperlスクリプトを呼び出し、スクリプトの出力を示すユーティリティjavaプログラムを作成しようとしています。私はcommand2ProcessBuilderはワイルドカードでコマンドを実行しません

String[] command2 = {"/archive/scripts/grep.pl", "/apps/ws/logs/api.log"};

を実行していたときに問題がある出力が正常に来ています。以下は

Can't open /apps/ws/logs/*: No such file or directory at /archive/scripts/grep.pl line 160.

あなたの参照のための完全なコードです:

StringBuffer output = new StringBuffer(); 
    try { 
     ProcessBuilder processBuilder = new ProcessBuilder(command1); 
     LOGGER.debug("Command: "+processBuilder.command()); 
     Process process = processBuilder.start(); 
     process.waitFor(); 
     BufferedReader br; 
     if (process.exitValue() == 0) { 
      LOGGER.debug("Inside if block. Exit value: "+process.exitValue()); 
      String line; 
      br = new BufferedReader(new InputStreamReader(process.getErrorStream())); 
      while ((line = br.readLine()) != null) { 
       output.append(line + "\n"); 
      } 
     } else { 
      LOGGER.debug("Inside Else block. Exit value: "+process.exitValue()); 
      br = new BufferedReader(new InputStreamReader(process.getInputStream())); 
      String line; 
      while ((line = br.readLine()) != null) { 
       output.append(line + "\n"); 
      } 
     } 
    } catch (Exception e) { 
     LOGGER.debug("Exception thrown"+e.getStackTrace()); 
     output.append(e.getStackTrace().toString()); 
     e.printStackTrace(); 
    } 
    return output.toString(); 

私はしかし、私はcommand1

String[] command1 = {"/archive/scripts/grep.pl", "/apps/ws/logs/*"};

を使用していたとき、私は次の例外を取得しています問題が何であるかを理解することはできません。これを達成する方法はありますか?

+0

を解釈するには、コマンドシェルを使用しますか?ファイルマスクはシェルによって解決されます。スクリプトを直接実行すると、シェルは省略されます。 –

+0

'*'という名前のファイルはありません。ボックスに '/archive/scripts/grep.pl/apps/ws/logs/*'コマンドを実行すると、適切な出力が得られます。 – Subhash

答えて

3

は、そのディレクトリ内の `*`の名前のファイルがあり、ワイルドカード

String[] command1 = {"bash", "-c", "/archive/scripts/grep.pl /apps/ws/logs/*"}; 
+0

@Reimus提案していただきありがとうございます。あなたが提案したコードを試しました。しかし、私は期待される出力を得ていません。エラーはもう出ていませんが。また、exitValueが '255'になっていることにも気付きました。 – Subhash

+0

'ProcessBuilder'からエラーストリームを確認してください。コマンドラインでコマンドを実行するとどうなりますか? – Reimeus

+0

私は以下の出力を得ます: '全体的に見つかった0のエントリ ' – Subhash

関連する問題