2012-03-23 3 views
0

Windows에서 유닉스 환경을 사용하기 위해 cygwin을 사용하고 있습니다.cygwin을 사용하여 Windows 환경에서 rSync를 내부적으로 사용하는 유닉스 쉘 스크립트를 실행하기 위해 java로 코딩하는 방법은 무엇입니까?

cygwin에서 실행되는 일부 쉘 스크립트로 작업 및 기타 작업을 동기화합니다. 자바 코드를 통해이 스크립트를 실행하고 싶습니다.

cygwin에서 스크립트를 실행하는 동안 간단한 에코 명령을 사용하여 특정 정보가 터미널에 표시됩니다. 응용 프로그램에 모든 정보를 표시하려고합니다.

어떻게하면됩니까 ??

답변

1

Runtime 클래스를 사용하여 Cygwin을 실행하십시오. 이것은 매우 부서지기 쉬운, 당신의 설정에 따라 다릅니다 만, 내 컴퓨터에서 나는 할 것이다 :

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

Process 완료, 그것은 표준 출력에 전송 된 것을 볼의 InputStream 객체의 핸들을 얻을 때까지 기다립니다와 stderror.

명령의 첫 번째 부분은 cygwin을 실행하고 두 번째 부분은 일부 스크립트 또는 명령 (-e 또는 --exec 사용)을 실행하는 것입니다. DOS 프롬프트에서이 명령을 테스트하여 코드를 자르기 전에 먼저 작동하는지 확인합니다. 또한, 수행하여 사용할 수있는 옵션을 살펴보고 : 또한

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

을 DOS 프롬프트 내에서.

편집 :이 --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); 
} 

추신 같은 것을 사용할 수 있습니다 이 오류를 처리하지 않습니다

+0

Windows 환경에서 UNIX 스크립트를 실행하기 위해 cygwin bash 쉘을로드해야하지 않습니까? – dhroove

관련 문제