2013-10-22 4 views
5

쉬움 스칼라 (또는 Java)에서 다음을 수행하는 방법이 있습니까? 스칼라 프로세스에서 명령 줄 명령을 실행하고 싶습니다. 예를 들면 다음과 같습니다.와일드 카드로 여러 셸 명령 실행

cd test && javac *.java 

동적으로 생성 된 셸 스크립트입니다. javac *.javatest 디렉토리에서 이 발생해야합니다. 평소 간단한

import scala.sys.process._ 
... 
"cd test && javac *.java".! 

또는

"cd test && javac *.java".!! 
스칼라가 && 및 와일드 카드 *을 misinterpretes 때문에

이 작동하지 않습니다. 왜 아이디어가 없습니다.

답변

11

원하는대로 문자열을 bash에 대한 명령 줄 인수로 입력해야합니다. (즉, Process(Seq("bash","-c","cd test && javac *.java")).!) 그 이유는 cd 같은 상태를 변경하는 명령을 입력하는 가상 셸이 없다는 것입니다. 명시 적으로 만들어야합니다.

process 도구를 사용하면 호출을 함께 연결할 수 있지만 호출의 부작용은 파일 시스템이나 쉘 환경에 더 잘 반영되어야합니다. 서론 텍스트 끝에 ProcessBuilder scaladoc contains an example.

+1

덕분에

import scala.sys.process._ "cd test".#&&("javac *.java").! 

등가 잘 작동합니다. 그 동안 관련 질문 [여기] (http://stackoverflow.com/questions/11790240/how-to-run-unix-shell-commands-with-wildcards-using-java), [여기] (http://stackoverflow.com/questions/2111983/java-runtime-getruntime-exec-wildcards) 및 [여기] (http://stackoverflow.com/questions/11576767/setting-current-working-directory-when-executing) -a-shell-process) 비슷한 점을 만든다. 스칼라 문서가이 문제에 대해 더 나을 수 있다고 생각합니다. –

1

이 많은 의미를 만드는,

"cd test" #&& "javac *.java" !