일부 사용자 입력 변수를 가져 와서 perl 스크립트에 전달하는 Java 프로그램을 작성하려고합니다. 실제로는 perl 스크립트에서 특정 문자열을 찾아서 사용자로 바꿉니다 - 입력 변수). 다음은 코드입니다.Java 프로그램에서 UNIX 명령을 실행할 수 없습니다.
String sedMain = "sed -e ";
String sedFirstLine = "'s/AAA/"+newFirstLine+"/' -e ";
String sedNewCntr = "'s/BBB/"+newCntr+"/' -e ";
String sedNewSpacing = "'s/SPACE/"+newSpacing+"/' -e ";
String sedNewDmax = "'s/MAX/"+newDmax+"/'";
String sedFile = " /filepath/myperlscript.pl > /filepath/myNEWperlscript.pl";
String sedCommand=sedMain+sedFirstLine+sedNewCntr+sedNewSpacing+sedNewDmax+sedFile;
System.out.println("SED COMMAND: "+sedCommand);
String testRun = "touch /filepath/hello.txt";
Process runSedCommand;
runSedCommand = Runtime.getRuntime().exec(sedCommand);
나는 IDE를 사용하고 있으며, sed 명령이 콘솔에 인쇄되면 올바르게 표시됩니다. 콘솔에서 sed 명령을 복사하여 터미널에서 실행하면 작동했습니다. Java에서 Process에 문제가 있는지 "testRun"이라는 문자열을 작성하고 "hello.txt"파일을 작성했습니다. 그러나 어떤 이유로 든 내 프로그램은 출력 perl 파일 "myNEWperlscript.pl"을 만들지 않습니다. 왜 이것이 작동하지 않는지에 관해서는 혼란 스럽다. 누구든지 도와 줄 수 있습니까?
exec()는 프로그램 이름과 매개 변수를 요소로 사용하여 String []을 가져 오지만 모두 단일 문자열로 연결하므로 효과적으로 인수가 손실됩니다. –
그래서 모든 요소를 포함하는 하나의 문자열을 작성해야합니까? –
아니요, 문자열 배열을 만들 필요가 있습니다 –