2014-04-08 4 views
0

java 프로그램에서 쉘 스크립트를 실행 중입니다. 해당 쉘 스크립트에서 데이터 마트 서버에 연결하고 resmgr 명령을 실행하고 있지만 resmgr의 출력을 가져올 수 없습니다. 명령, 명령 줄에서 동일한 명령을 실행하면 출력을 가져올 수 있습니다.자바 프로그램에서 실행중인 쉘 스크립트에서 출력을 가져올 수 없습니다.

쉘 스크립트 :

#!/bin/bash 
source /opt/datamart/dataMart.env 
/opt/datamart/bin/resmgr -export fgp -colNames "nName frm.dbIndex" -filter "npath($1) frm.name($2)" -noHead -sep ',' 

자바 프로그램 :

import java.io.*; 
import java.util.*; 

public class Test { 

    public static void main(String argsm[]) throws IOException, InterruptedException { 
     String cmd="./getDBIndex1.sh ~AP~Generic~Universal~Throughput \"Inbound Volume (octets)\""; 
     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); 
     } 
    } 
} 

답변

0

나는 예상대로 문자열 cmdrun.exec()에 의해 해석되지 않기 때문에 그 같아요. 문자열 cmd을 문자열 배열로 변경해보십시오. 나는. 이자형. 이것에 대한

String cmd="./getDBIndex1.sh ~AP~Generic~Universal~Throughput \"Inbound Volume (octets)\"" 

: 그냥 라인 변경

String[] cmd= new String[] {"./getDBIndex1.sh", "~AP~Generic~Universal~Throughput", "Inbound Volume (octets)"}; 

을 바로 변경되지 않은 코드의 나머지 부분을 둡니다. 또한 스크립트가 현재 작업 디렉토리에 있는지 확인하십시오.

관련 문제