2013-03-26 1 views
0

나는 ProcessBuilder를 사용하여 Java를 통해 나오지 명령을 실행하려고 IOException이 무엇입니까를 통해 명령을 동시에 :IOException이들이받은 배쉬 ProcessBuilder를

ERROR: java.io.IOException: Cannot run program "sed -i 's/hello world//g' 
/home/user/test": error=2, No such file or directory 

명령은 sed -i 's/hello world//g' /home/user/test 입니다 그러나 문제가 명령하지, 난 단말기를 통해 동일한 명령을 실행할 수 있으며 문자열을 제거 할 것 "안녕하세요!"

과정 파일을 찾을 수 없습니다하는 원인이 무엇
public void removeString(String str, String file) throws IOException { 
    String command = "sed -i \'s/" + str + "//g\' " + file; 
    System.out.println(command); 
    ProcessBuilder pb = new ProcessBuilder(command); 
    Process p = pb.start(); 
} 

?

+0

전체 경로를 사용하여 sed 바이너리를 실행할 수 있습니다. – Snicolas

답변

3

ProcessBuilderexpects individual arguments to be sent separately을 생성자에 넣습니다. 이처럼 실행 해보십시오 :

ProcessBuilder pb = new ProcessBuilder("sed", "-i", "s/hello world//g", "/home/user/test"); 

그것은 shell injection 보안 취약점을 방지하기 위해이 방식으로 작동

(당신이 원한다면 당신은 또한 그것을 List<String>를 전달할 수 있습니다).

+0

그 트릭을했다. 감사. – Aboutblank