2009-11-14 4 views
0

쉘 명령을 호출하는 프로그램이 있습니다. java의 run.exec를 사용하여 명령을 실행하면 작동하지 않지만 터미널에서 직접 명령을 실행하면 매력과 같이 작동합니다. 내가 명령java run.exec 명령과 쉘 실행간에 차이가 있습니까?

pdf2swf 3bbba47.pdf -T 9 -o 3bbba47.swf 

에서 따옴표를 제거하려고 할 때

ex: pdf2swf "3bbba47.pdf" -T 9 -o "3bbba47.swf" didnt worked 
    from java program but worked directly executing it in terminal. 

는하지만 그것은 run.exec과 단말기 모두에서 벌금을했다.

왜 그렇습니까?

나는 맥과 우분투 모두 시도하고 같은 결과로 끝났다.

답변

2

run.exec()는 쉘을 호출하지 않습니다. 쉘은 명령 행을 구문 분석하고 pdf2swf에 인수로 전달하기 전에 인용 부호를 효과적으로 제거합니다. run.exec()로만 "raw"명령을 실행할 수 있습니다.

run.exec()를 사용하여 을 실행하고 명령을 셸 명령으로 구문 분석 할 수 있습니다. 인용은 약간 고통 스럽지만 실행 가능할 것입니다.

1

쉘에있을 때 쉘이 JVM에 제공하기 전에 인용 문자가 해석됩니다.

당신이 run.exec에있을 때, 따옴표는 명령의 일부로 간주하므로 JVM은에서 [ "3bbba47.pdf"] 대신 [3bbba47.pdf]의

0

을 요구한다고 생각됩니다 http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1

Runtime.exec의()는 명령 줄없는

Runtime.exec의()을 충당하기 위해 마지막으로 함정 실수 간부는() 문자열을 수용하는 것을 가정한다

그 명령 행 (또는 쉘) 받아들입니다. Runtime.exec()는 플랫폼이 아닌 보다 훨씬 제한적입니다. 이 함정은 입니다. exec() 메서드를 사용하여 사용자가 문자열을 명령 줄에서 사용하려고하면 발생합니다. 혼란은 명령이 exec() 메서드의 매개 변수 이름이기 때문일 수 있습니다. 따라서 프로그래머 은 명령을 명령 줄에 입력 할 수있는 문자로 이 아닌 하나의 프로그램 및 해당 인수와 연결하는 대신 잘못 입력합니다.