2012-04-10 2 views
0

프로세스 'exec 함수를 사용하여 로컬에서 bash 명령을 실행하는 Java 프로그램 인 MyAwesomeProgram을 작성 중입니다. 내 코드는/home/a/b/c에 있으며 실행해야하는/home/a/b/d에있는 .sh 파일이 있습니다. 내 코드를 실행할 때, :다른 디렉토리에서 Java의 exec를 사용하여 .sh 파일을 실행 하시겠습니까?

Process p; 
Runtime rt = new Runtime.getRuntime(); 
p = rt.exec("./home/a/b/d/shell.sh"); 
p.waitFor(); 

나는 오류가 나타납니다

Exception in thread "main" java.io.IOException: Cannot run program "./home/a/b/d/shell.sh": java.io.IOException: error=2, No such file or directory 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) 
at java.lang.Runtime.exec(Runtime.java:593) 
at java.lang.Runtime.exec(Runtime.java:431) 
at java.lang.Runtime.exec(Runtime.java:328) 
at MyAwesomeProgram.main(MyAwesomeProgram.java:186) 
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory 
at java.lang.UNIXProcess.<init>(UNIXProcess.java:148) 
at java.lang.ProcessImpl.start(ProcessImpl.java:65) 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453) 

을 나는 그러나 내가 찾을 수 없어,이 그냥 exec 명령 문자열을 포맷의 실수라고 생각 지금까지의 해결책. 어디서 엉망진창있어? exec를 효과적으로 사용하기위한 다른 팁이나 트릭은 높이 평가 될 수 있지만 완전히 선택 사항입니다. 감사!

편집 : 코드가 작동하고있어, Woot4Moo가 말한 것뿐만 아니라 거꾸로 얻은 몇 가지 디렉토리 참조와 관련된 문제였습니다.

+0

:

/home/a/b/c 

당신이 다음에 도착하려는 : 당신이에있는 경우

/home/a/b/c/home/a/b/d 

..을 당신이 갈 수 있습니다 하나의 디렉토리 : 그래서 본질적으로 귀하의 의견은 다음과 같은 것이있다 너없이 그걸 시도 했니?. 코드가/home/a/b/c에서 실행 중이면 /home/a/b/c/home/a/b/d/shell.sh – Dan

+0

명령 줄에서 실행하는 방법을 게시하십시오. 현재 디렉토리 (예 :/home/chris) 포함 – Woot4Moo

+0

javac MyAwesomeProgram.java, java MyAwesomeProgram. main 메소드는 코드를 포함하고 있습니다 (이것은 이미 테스트를 거친 더 큰 그룹의 프로그램에 통합하기 전에 exec 기능을 테스트하는 더미 프로그램입니다). 필요한 모든 것이 이미 수입되어 예상대로 작동하도록 테스트되었습니다. – Chris

답변

3

은 당신의 프로그램에 살고있는 경우 :

/home/a/b/c 

하고 스크립트에 살고 :

/home/a/b/d 

당신이 사용하는 . 당신이 바로 그 디렉토리에 있지 않습니다. 다음과 같은 경로를 간부 인 싶어 :

../d/script.sh 

.은 현재 디렉토리 + 당신의 문자열을 사용했다.

/home/a/b 
+0

제안 사항을 반영하도록 코드를 업데이트했으며 터미널에서 수동으로 작업하는 경우에도 "../home/a/b/d/script.sh"를 제외하고 동일한 java.io.IOException을 얻습니다. 이견있는 사람? – Chris

+0

파일에 대한 사용 권한은 무엇입니까? 그리고 어떤 사용자로 코드를 실행하고 있습니까? – Woot4Moo

+0

사용 권한은 755이고 root가 아닌 priviedges가 있습니다. 문제의 모든 파일을 조작/삭제할 수 있어야하므로 권한 문제는 아닌 것 같습니다. 전체 코드는 프로세스, 런타임 및 exec 호출을 작성하는 것일 뿐이므로 제외하지 않을 항목이 많지 않습니다. – Chris

관련 문제