Scala进程与bash不同?

时间:2017-07-20 21:39:05

标签: scala

为什么以下:

zipf

失败:

"find terraform -type f -exec sed -i 's/prevent_destroy *= .*/prevent_destroy = false/g' {} +".!

虽然它在shell中都很好用。

编辑: 另一个例子:

sed: -e expression #1, char 1: unknown command: `''

为什么我不能写入文件?

1 个答案:

答案 0 :(得分:3)

如果我使用Seq隐式转换为ProcessBuilder而不是String,它会为我工作:

Seq("find", "terraform", "-type", "f", "-exec", "sed", "-i", "s/prevent_destroy *= .*/prevent_destroy = false/g", "{}", "+").!

请注意,您不需要围绕sed替换命令的引号。

由于字符串的转换方式,你的方式不起作用。看一下scala源代码(scala.sys.process.Process.scala):

  def apply(command: String, cwd: Option[File], extraEnv: (String, String)*): ProcessBuilder = {
    apply(command.split("""\s+"""), cwd, extraEnv : _*)

它在空格上拆分字符串,这打破了你的sed替换命令。最好使用Seq,以避免这种情况。