2014-05-15 4 views
0

이것은 매우 특정한 문제로 어디서나 단서를 찾지 못했습니다. 그래서 Java 프로그램에서 여러 가지 다른 Linux 명령을 호출하기 위해 Runtime.getRuntime(). exec()를 사용하고 있습니다. 다음 코드는 약간의 변경 (bash 및 문자열 배열 사용 여부)을 적용 할 때 거의 모든 유형의 Linux 명령에서 잘 작동합니다. 그러나 Runtime.getRuntime(). Linux more 명령을 사용하면 exec()가 멈 춥니 다.

command = "ls -l | grep something"; 
strArr1 = new String[]{"/bin/sh" , "-c", command}; 
p1 = Runtime.getRuntime().exec(strArr1); 
exitVal = p1.waitFor(); 

, 내 프로그램이 중지되고 난 다음 명령을 사용할 때 처리를 완료하지 않습니다 나는 또한, 예를 들어 다른 변화를 시도

command = "more file0.txt"; 

한 다음과 같은 것이 있습니다 오류 :

command = "more keywords/file0.txt"; 
strArr1 = new String[]{command}; 
p1 = Runtime.getRuntime().exec(strArr1); 
exitVal = p1.waitFor(); 
또는
command = "more keywords/file0.txt"; 
p1 = Runtime.getRuntime().exec(command); 
exitVal = p1.waitFor(); 

오류는 다음과 같습니다

There was a problem:java.io.IOException: Cannot run program "more keywords/file0.txt": error=2, No such file or directory 

사실, file0.txt가 존재한다.

그래서 Linux 명령이 Runtime.getRuntime(). exec()에서 더 작동하는지 궁금합니다. 이 명령은 다른 명령에 대한 결과를 생성하기 때문에 실제로 작동해야합니다. 미리 감사드립니다.

+0

'more'는 일반적으로 텍스트 파일의 대화식 명령 줄보기에 사용됩니다. 결과를 다른 명령에 정확히 사용하려면 어떻게합니까? – merlin2011

+4

당신은'more' 또는'less'와 같은 호출기의 목적을 오해하는 것처럼 보입니다. 파일을 읽는 프로세스를 시작할 이유가 없지만, 원할 경우 아마도 'cat'을 사용해야합니다. –

+0

@ChrisStratton 고양이가 완벽하게 작동했습니다. 감사. – Lorderon

답변

2

쉘에서 more 명령을 실행하면 사용자가 Enter/whitespace를 눌러 스크롤을 계속하기 때문에 프로그램이 중지됩니다. Java에서 실행될 때도 마찬가지입니다. stdout으로 출력해야하는 경우 cat을 대신 사용해보십시오.

0

그래, 다른 사람들이 지적한대로 more을 사용하지 말아야하지만, 존재하지 않는 파일에 more을하고 있기 때문에 발생하는 오류 일 가능성이 높습니다. 적어도 장소가 아닌 곳에 more이 실행 중입니다.

파일의 전체 위치를 지정하면 오류가 사라집니다. 파일이 루트 임시 폴더에있는 경우

예를 들어, 당신이 파일의 위치 무엇인지 모르는 경우가

more /temp/keywords/file0.txt

, pwd 어디 파일을 얘기해야 할 입니다. file0.txt 파일의 폴더로 이동하여 pwd을 실행하십시오.