为什么以下:
zipf
失败:
"find terraform -type f -exec sed -i 's/prevent_destroy *= .*/prevent_destroy = false/g' {} +".!
虽然它在shell中都很好用。
编辑: 另一个例子:
sed: -e expression #1, char 1: unknown command: `''
为什么我不能写入文件?
答案 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,以避免这种情况。