2014-11-29 6 views
0

Java를 통해 터미널에 명령을 보내는 것에 관한 정말 혼란스러운 문제가 있습니다.Java에서 debian terminal 명령을 "|"

 Process p = Runtime.getRuntime().exec(new String[]{"useradd", server, "-p", pass, "-d",  "/home/dakadocp/servers/" + server, "-s", "/bin/false"}); 
     Runtime.getRuntime().exec(new String[]{"echo", server + ":" + pass, "|", "chpasswd"}); 

첫 번째 명령이 하나의 "useradd 사용자 -p 암호 -d/가정/FTP/테스트/-s/빈/거짓"이고 두 번째는이 에코해야한다 : 나는 정확히이 코드가 사용자 이름 : new_password | chpasswd, 첫 번째 명령은 아무런 문제없이 작동하며 "server"변수로 정의한 사용자를 만듭니다. 그러나 두 번째 명령을 실행하여이 명령이 성공하지 못한 경우 사용자가 결과를 출력하려고하면 출력이 null이되고 암호는 그렇지 않습니다. 변경되었지만이 명령을 터미널에 직접 입력하면 완벽하게 작동하므로 Java 문제 일뿐입니다.

"|"로 일부 명령을 시도하기 전에 문제가 문자 "|"에 있다고 생각합니다. 그 행동은이 명령과 같습니다. 내가 뭘 잘못하고 있니?

감사합니다. Welite.

답변

0

|은 쉘 기능이며 실행하려면 쉘이 필요합니다. 사소한 수정은 셸을 실행하는 것입니다 :

Runtime.getRuntime().exec(new String[] { "sh", "-c", "echo something | chpasswd" }); 

그러나 Java는 쉘 또는 에코가 필요한 프로세스에 쓰는 것 이상입니다.

Process p = Runtime.getRuntime().exec(new String[] { "chpasswd" }); 
PrintWriter writer = new PrintWriter(p.getOutputStream()); 
writer.println("foo:bar"); 
writer.close(); 
+0

니스, 감사, 내가 두 번째 솔루션을 사용하고 꽤 잘 작동 : 더 좋은 방법은 그 자체로 chpasswd를 실행하고 여기에 문자열을 작성하는 것입니다! – Welite