2011-07-29 7 views
0

나는 Linux에서 java를 통해 nm 명령을 실행하려고합니다. java를 통해 linux 명령을 실행하십시오.

나는이 코드를 시도 :

command = "nm -l file1.o > file1.txt"; 
Process p = Runtime.getRuntime().exec(command); 

을하지만, 그것을 작동하지 않는 코드에 문제가 있나요?

+2

예외는 무엇입니까? –

답변

1

은 당신이해야 할 작업은 다음과 같습니다 : 당신은 -c와 쉘을 호출하면

, 당신은 당신의 명령을 실행할 수 있습니다

String command = "nm -l file1.o > file1.txt"; 
Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", command}); 

다음 "간단한 대답" 은 작동하지 않습니다. :

String command = "/bin/sh -c 'nm -l file1.o > file1.txt'"; 
Process p = Runtime.getRuntime().exec(command); 
메서드는 공백을 구분 기호로 사용하여 문자열을 순진하게 분할하고 인용을 무시하기 때문에

입니다. 위의 예는 다음 명령/인수 목록을 제공하는 것과 같습니다.

+0

스티븐에게 감사드립니다. – Ashish

+0

어떻게이 명령의 출력을 얻을 수 있습니까? 우리가 sh를 사용하면 새로운 쉘을 열 때 명령의 출력을 캡처 할 수 있습니까? –

4

이것은 실행 파일이 아니며 사실 쉘 스크립트입니다.

다음
/bin/sh -c "command > here" 
+0

답장을 보내 주셔서 감사합니다. 하지만 이것은 우분투에서 작동하지 않습니다. 나는 당신이 쓴 것처럼 왜 내가 같은 코드를 사용하고 있는지 모른다. – Ashish

+0

네 ... 가능한 대답에 대한 내 대답을보십시오. –

0

파이프의 대안은 명령의 표준 출력을 읽는 것입니다 (예 : Java exec() does not return expected result of pipes' connected commands 참조).

"> file.txt"를 사용하여 출력을 리디렉션하는 대신 출력 내용을 읽고 StringBuffer 또는 OutputStream 또는 원하는대로 쓸 수 있습니다.

이렇게하면 stderr을 읽고 오류가 있는지 (예 : 기기에 남은 공간이없는 경우 등) 확인할 수 있습니다. (접근법을 사용하여 "2>"를 사용하여 수행 할 수도 있습니다)

관련 문제