【问题标题】:Running multiple shell commands with wildcards使用通配符运行多个 shell 命令
【发布时间】:2013-10-22 21:11:48
【问题描述】:

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

 cd test && javac *.java

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

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

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

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

【问题讨论】:

    标签: shell scala


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这很有意义。同时,我发现了相关的问题hereherehere 提出了类似的观点。我认为 Scala 文档在这个问题上可能会更好。
    【解决方案2】:

    这应该可以正常工作

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

    相当于

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

    【讨论】:

      猜你喜欢
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 2013-11-22
      • 2012-09-20
      • 2011-08-15
      • 2017-10-12
      • 2019-02-05
      相关资源
      最近更新 更多