2011-10-30 2 views
1

Java 프로그램에서 셸 스크립트를 실행하려했지만 전체 스크립트가 실행되고 있지 않습니다. 그리고 왜 우리가 그런 문제를 겪게 될지 생각해?Java 프로그램에서 실행 된 스크립트의 일부분 만

File file = new File("/path/to/script"); 
String COMMAND= "./run"; 
ProcessBuilder p = new ProcessBuilder(COMMAND); 
p.directory(file); 
try { 
    Process startProcess= p.start(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

스크립트는 잘 실행하지만 전체하지 스크립트가 실행됩니다

자바 코드는 쉘 스크립트를 실행합니다. 그것은 단지 첫 번째 라인이 실행되고있는 것 같습니다.

+0

스크립트의 첫 번째 줄은 무엇입니까? 첫 번째 라인 만 실행됩니까? – Mat

+0

이 중복 가능성을 참고하십시오 : [ProcessBuilder를 사용하여 java에서 프로그램을 시작하지 못했습니다.] (http://stackoverflow.com/questions/1043611/failure-to-start-program-from-java-using-processbuilder) – trashgod

+0

이 문제에 대해 듣고 위의 코드를 보면 Runtime.exec()이 (가) 안되는 모든 팁을 읽고 구현하는 것이 좋습니다. (http://www.javaworld.com/javaworld/jw- 12-2000/jw-1229-traps.html). 예를 들어,'Process'의'System.out' /'err'을 소비하는 것 (예를 들어, 문제의 근원)을 비추는 것 (그리고 어떤 방식으로보고)을 소비하는 것입니다. –

답변

1

스크립트가 실행되기 시작했다면 문제는 java가 아니라 스크립트 자체에서 발생합니다.

차이가있는 이유는 잘못된 경로이거나 잘못된 환경 일 수 있습니다. 콘솔에서 스크립트를 실행할 때 사용자의 환경에 있으므로 스크립트는 모든 환경 변수를 사용할 수 있습니다.

일부 디버그 출력을 추가하여 문제를 파악하도록하십시오.

+0

안녕하세요, 우분투에서 터미널을 통해 실행할 때 스크립트가 제대로 실행됩니다. 그러나 동일한 스크립트가 자바 프로그램에서 완전히 실행되지는 않습니다. 스크립트에는 tinyos 명령이 있습니다. 'make'를 사용하여 tinyos 명령으로 스크립트를 실행하려고했을 때도 동일한 문제가 발생했습니다. 감사합니다. . – Ashish

+0

PATH가 터미널 설정에서 편도로 설정되어 있고 자바 환경에서 다르게 설정되어있는 것은 거의 확실합니다. AlexR이 말했듯이 스크립트에 디버깅 메시지를 추가하거나 스크립트에서 실행중인 모든 명령에 전체 경로 접두사를 추가하십시오. 행운을 빕니다. – shellter

+0

안녕하세요, 경로에 문제가없는 것 같습니다. 문제는 환경 변수입니다. 스크립트의 실행되지 않는 부분은 다음과 같습니다. if cygpath -w />/dev/null 2>/dev/null; 다음 CLASSPATH = "oscilloscope.jar; $ CLASSPATH" 다른 CLASSPATH = 출력을 제공하지 않습니다 스크립트 내부에서 "oscilloscope.jar $의 CLASSPATH"또한 Fi를 자바 오실로스코프 , 에코 ... 때 스크립트 자바 프로그램에서 실행됩니다. 터미널에서 스크립트를 실행할 때 결과를 볼 수 있습니다. Ashish. – Ashish

관련 문제