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

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错误解析了 && 和通配符*。我不知道为什么。

2个回答

15

对于您需要的内容,您应将字符串作为命令行参数输入到 bash。 (也就是说, Process(Seq("bash","-c","cd test && javac *.java")).!) 原因是没有虚拟shell进入其它命令,如cd会更改状态。您必须显式地创建一个。

process工具可以让您链接调用,但调用的副作用最好反映在文件系统或类似地方,而不是 shell 环境中。 ProcessBuilder scaladoc 在介绍文本末尾包含了一个示例。 详见这里


1
谢谢,这让我更加理解了。同时,我已经找到了相关的问题这里这里这里,它们提出了类似的观点。我认为在这个问题上,Scala的文档可以更好些。 - Martin Berger

0
这应该可以正常工作。
import scala.sys.process._    

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

等同于。
"cd test" #&& "javac *.java" !

这个评论已经不再正确,并且对回答问题没有帮助。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接