2012-04-10 3 views
-2
Process log_remover = Runtime.getRuntime().exec("echo \"bleh\" > test.txt"); 
log_remover.waitFor(); 
log_remover.destroy(); 

실행 유닉스 런타임 클래스를 사용하여 자바에서 명령을

Process node_creation = Runtime.getRuntime().exec("cp -r ../HLR"+String.valueOf(count-1)+" ../HLR"+String.valueOf(count)); 
node_creation.waitFor(); 
node_creation.destroy(); 

그러나이 작품 아무것도하지 않습니다 : S

+1

그리고 무엇이 문제입니까? –

+0

롤인가요? –

답변

1

리디렉션 쉘을 사용하는 경우에만 작동을. Runtime.exec()는 쉘을 사용하지 않습니다.

Java Executing Linux Command

+0

흠 맞아 .. 고마워. .. 링크가 도와 줬어. –

1

리디렉션 쉘에 의해 처리를 참조하십시오, 당신은 여기에 쉘을 호출하지 않는, 그래서 당신은 리디렉션을 사용할 수 없습니다. 이런 식으로 뭔가, 다른 한편으로는, 작동합니다 :

Runtime.getRuntime().exec(new String[] {"sh", "-c", "echo 'bleh' > text.txt"}); 

참고가 나는 등 제대로 명령 줄에 인용 된 문자열을 토큰 화 문자열의 배열을 exec()의 형태를 사용하려면이 옵션을 변경했습니다 다른 무언가가있다 껍질 만이 할 수있는 일! 이전

+0

멍청한 일이 없었다. –

+0

내가 -c @ 가장 친숙한 프리드먼 힐을 넣었 니? 만약 korn 쉘을 사용하고 있다면 쉘 –

+0

프로세스 log_remover = Runtime.getRuntime(). exec ("log_remover.sh"); 왜이 작동하지 않습니다 –

0

클래식 실수 내가 본 몇 번 ...

Runtime.getRuntime().exec()의 첫 번째 인수는 실행입니다 그래서 코드는 문자 그대로 echo \"bleh\" > test.txt라는 명령을 실행하려고하지만 그것은하려고한다 echo을 실행하십시오. 실행 파일에 대한 인수는 다음과 같이 실행 후 전달과 같다 : * nix에서 스크립트 연산자 > 쉘 일이 있기 때문에

Runtime.getRuntime().exec("echo", new String[]{"bleh"}); 

리디렉션 출력은 또 다른 이야기이다. java에서 이것을 복제하려면 명령의 출력 스트림을 가져 와서 다른 프로세스의 입력 스트림으로 보내야합니다.

+0

찾기 ./HLR3/LOGS -name '* .txt'-exec rm {} \; 이걸 어떻게 실행할 수 있습니까? 보헤미안 –

+0

프로세스 log_remover = Runtime.getRuntime(). exec ("log_remover.sh"); 이 doesnt 일 –

+0

는'Runtime.getRuntime(). exec ("/ usr/bin/log_remover.sh")'또는 무엇이든과 같은 절대 경로를 사용한다. java exec 환경은 쉘과 다릅니다. – Bohemian

관련 문제