2013-10-11 4 views
1

"/ usr/local/freeswitch/bin"특정 디렉토리에서 originate 명령을 실행하려고합니다. bin에서 ./fs_cli 명령으로 실행 파일 fs_cli를 실행해야합니다. In fs_cli 나는 다음 명령을 실행해야 같은 명령이Java에서 특정 디렉토리의 터미널 명령을 실행하는 방법

./fs_cli -x "originate loopback/1234/default &bridge(sofia/internal/1789)" 

내가 위의 작업을 수행하는 자바 프로그램을 folowing 시도 함에서 실행할 수 있습니다

originate loopback/1234/default &bridge(sofia/internal/1789) 

터미널에서 잘 작동 그것의

Process pr = Runtime.getRuntime().exec("./fs_cli -x \"originate loopback/1234/default &bridge(sofia/internal/[email protected])\""); 
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
String str = null; 
while ((str = br.readLine()) != null) { 
    System.out.println(str); 
} 

내가 위의 프로그램은 출력

출력

-ERR 다음 표시되어 현재의 위치에 fs_cli 및 배치의 심볼릭 링크를 creted했다 "명령을 찾을 수 없습니다 기원!

위의 명령에 위와 같은 명령을 사용하면 터미널에서 문제가 없으므로 Java와 동일해야합니다. 그래서 어딘가에 잘못되었습니다. 이 문제를 해결하는 데 도움을주십시오.

+0

왜이 완전히 경로 그것을 또는/usr/지방/freeswitch/빈/fs_cli이 작동하지 않아? –

답변

4

사용 ProcessBuilder하고

ProcessBuilder pb = new ProcessBuilder(
     "./fs_cli", 
     "-x", 
     "originate loopback/1234/default &bridge(sofia/internal/[email protected])"); 
pb.directory(new File("...")); 
Process pr = pb.start(); 
BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
String str = null; 
while ((str = br.readLine()) != null) { 
    System.out.println(str); 
} 

가능한 경우, 별도의 String들과 같이 명령 인수를 제공해야 directory 경로를 제공,이 과정에 별도의 인수로 각을 전달하고 그 인수 돌볼 것 당신을 위해 따옴표로 이스케이프해야합니다 (이 따옴표를 기대 않는 한, 당신은 어쨌든 포함되어야한다)

+0

감사합니다. sooooo so so much, 나는 정말로 퇴장했습니다. 나는 이것을 끝내기 위해 지난 6 일 동안 지금 일하고 있었다 – Chella

0

이 시도 :

String command = "./fs_cli -X \"originate loopback/1235/default &bridge (sofia/internal/[email protected])\""); 
    Runtime.getRuntime().exec(command); 
+0

u sooooo를 많이 감사한다, 나는 정말로 나왔다. 나는 이것을 끝내기 위해왔다. 지난 6 일간이 일을 끝냈다. – Chella

1

다른 방법은 다음과 같습니다

ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", "cd /usr/local/freeswitch/bin && ./fs_cli -x \"originate loopback/1234/default &bridge(sofia/internal/1789)\""); 
processBuilder.start(); 
+0

감사합니다. sooooo so much, 나는 정말로 끝장났습니다. 나는 지난 6 일 동안이 일을 끝내고 이제 끝내 왔습니다. – Chella

관련 문제