是否有 easy 方法在Scala(或Java)中执行以下操作。我想从Scala进程运行命令行命令,例如:
cd test && javac *.java
作为动态生成的shell脚本。 javac *.java
应该
发生在目录test
中。通常的简单
import scala.sys.process._
...
"cd test && javac *.java".!
或
"cd test && javac *.java".!!
不起作用,因为Scala误解了&&
和通配符*
。我没有
想法为什么。
答案 0 :(得分:13)
对于你想要的,你应该输入字符串作为bash
的命令行参数。 (也就是说,Process(Seq("bash","-c","cd test && javac *.java")).!
)原因是没有虚拟shell,你输入的命令会改变cd
之类的状态。你必须明确地创建一个。
process
工具允许您将调用链接在一起,但调用的副作用最好反映在文件系统或某些情况下,而不是在shell环境中。介绍文本末尾的ProcessBuilder
标量contains an example。
答案 1 :(得分:1)
这应该可以正常工作
import scala.sys.process._
"cd test".#&&("javac *.java").!
相当于
"cd test" #&& "javac *.java" !