6

有没有一种简单的方法可以在 Scala(或 Java)中执行以下操作。我想从 Scala 进程运行命令行命令,例如:

 cd test && javac *.java

作为动态生成的 shell 脚本。javac *.java应该发生在目录中test。平常的简单

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

或者

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

不起作用,因为 Scala 误解了&&and 通配符*。我不知道为什么。

4

2 回答 2

14

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

这些process工具将允许您将调用链接在一起,但调用的副作用最好反映在文件系统或类似的东西中,而不是在 shell 环境中。ProcessBuilderscaladoc在介绍性文本的末尾包含一个示例

于 2013-10-22T22:24:49.847 回答
1

这应该可以正常工作

import scala.sys.process._    

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

相当于

"cd test" #&& "javac *.java" !
于 2017-10-16T00:46:10.033 回答