在Scala程序的shell命令中使用变量(不是REPL)

时间:2018-10-16 06:20:44

标签: scala

程序中-不是 REPL-是否可以引入字符串变量来表示要执行的shell命令?

import sys.process._
val npath = opath.substring(0,opath.lastIndexOf("/"))
s"rm -rf $npath/*" !
s"mv $tmpName/* $npath/" !

编译器说:

:103: error: type mismatch;
 found   : String
 required: scala.sys.process.ProcessLogger
         s"mv $tmpName/* $npath/" !
     ^

请注意,在REPL中,可以使用

解决此问题
  :power

但是..我们不在这里的REPL中。

1 个答案:

答案 0 :(得分:0)

我发现了一个有用的解决方法,主要保留了预期的结构:

使用

 Seq[String].!

语法。但是通过使用空格作为定界符,我们仍然可以用wysiwig方式写出来

 import sys.process._
 val npath = opath.substring(0,opath.lastIndexOf("/"))
 s"rm -rf $npath/*".split(" ").toSeq.!
 s"mv $tmpName/* $npath/".split(" ").toSeq.!

这里的限制是命令中的嵌入空格将无法工作-它们需要命令的每个部分的显式 Seq

如果要运行一组命令,这会更好一些:

Seq(s"rm -rf $npath/*",s"mv $tmpName/* $npath/").foreach{ cmd=>
   println(cmd)
   cmd.split(" ").toSeq.!
}
相关问题