使用通配符运行多个shell命令

时间:2013-10-22 21:11:49

标签: shell scala

是否有 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误解了&&和通配符*。我没有 想法为什么。

2 个答案:

答案 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" !