Scala进程与bash不同?
为什么会出现以下情况:Scala进程与bash不同?,scala,Scala,为什么会出现以下情况: "find terraform -type f -exec sed -i 's/prevent_destroy *= .*/prevent_destroy = false/g' {} +".! 在以下情况下失败: sed: -e expression #1, char 1: unknown command: `'' 然而,它在一个外壳中运行良好 编辑: 另一个例子: "echo 'someText' > someFile").! "cat someFile".!
"find terraform -type f -exec sed -i 's/prevent_destroy *= .*/prevent_destroy = false/g' {} +".!
在以下情况下失败:
sed: -e expression #1, char 1: unknown command: `''
然而,它在一个外壳中运行良好
编辑:
另一个例子:
"echo 'someText' > someFile").!
"cat someFile".! // This doesn't print anything
为什么我不能在文件中写入?如果我使用到ProcessBuilder的Seq隐式转换而不是字符串,这对我来说是可行的:
Seq("find", "terraform", "-type", "f", "-exec", "sed", "-i", "s/prevent_destroy *= .*/prevent_destroy = false/g", "{}", "+").!
请注意,sed substitution命令周围不需要引号
您的方式不起作用,因为字符串是如何转换的。看看scala源代码(scala.sys.process.process.scala):
它在空格上拆分字符串,这会破坏sed替换命令。最好改用Seq,以避免这种情况。如果我使用Seq到ProcessBuilder的隐式转换,而不是字符串,这对我来说是有效的:
Seq("find", "terraform", "-type", "f", "-exec", "sed", "-i", "s/prevent_destroy *= .*/prevent_destroy = false/g", "{}", "+").!
请注意,sed substitution命令周围不需要引号
您的方式不起作用,因为字符串是如何转换的。看看scala源代码(scala.sys.process.process.scala):
它在空格上拆分字符串,这会破坏sed替换命令。为了避免这种情况,最好使用Seq。您能发布更多的上下文吗?比如字符串在scala代码中是如何形成的?@tom得到了一个长的scala表达式。你能再发布一些上下文吗?比如字符串是如何在scala代码中形成的?@tom得到了一个长的scala表达式。这是一个很好的观点,但是如果我做了
Seq(“echo”,“sometext”,“someFile”)代码>然后“cat someFile”代码>我们可以看到该文件不包含任何内容。@Joan
不是该命令的一部分,因此您应该(类似于)Seq(“bash”、“-e”、“echo sometext>someFile”)
或者是的,请查看文档以了解更多详细信息:def#>(f:File):ProcessBuilder
将此过程的输出流写入给定的文件。您是否能够使用@dk14对Seq(“bash”、“-c”、“您的命令在这里”)
?Seq(“sh”、-c”、“您的命令在这里”)代码>工作得很好,谢谢大家!这是一个很好的观点,但如果我做Seq(“echo”,“sometext”,“someFile”)代码>然后“cat someFile”代码>我们可以看到该文件不包含任何内容。@Joan
不是该命令的一部分,因此您应该(类似于)Seq(“bash”、“-e”、“echo sometext>someFile”)
或者是的,请查看文档以了解更多详细信息:def#>(f:File):ProcessBuilder
将此过程的输出流写入给定的文件。您是否能够使用@dk14对Seq(“bash”、“-c”、“您的命令在这里”)
?Seq(“sh”、-c”、“您的命令在这里”)代码>工作得很好,谢谢大家!