2013-10-22 37 views
5

是否有一个简单方式在Scala(或Java)中执行以下操作。我想从Scala进程运行命令行命令,例如:使用通配符运行多个shell命令

cd test && javac *.java 

作为一个动态生成的shell脚本。 javac *.java应该 发生在目录test。一贯的简约

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

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

不起作用,因为Scala misinterpretes的&&和通配符*。我没有 想法为什么。

回答

11

对于你想要的,你应该输入字符串作为bash的命令行参数。 (也就是Process(Seq("bash","-c","cd test && javac *.java")).!)原因在于没有虚拟外壳进入你将要改变状态的命令,如cd。你必须明确地创建一个。

process工具将允许您将调用链接在一起,但调用的副作用最好反映在文件系统或某些中,而不是在shell环境中。介绍性文字末尾的ProcessBuilder scaladoc contains an example

+1

谢谢,这使得有很大的意义。同时,我发现相关的问题[这里](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),它们有相似之处。我认为Scala文档在这个问题上可能会更好。 –

1

这应该做工精细

import scala.sys.process._  

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

相当于

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