【问题标题】:Executing bash strings using scala.sys.process使用 scala.sys.process 执行 bash 字符串
【发布时间】:2011-12-04 15:09:25
【问题描述】:

我最近在 Scala 中发现了 sys.process 包,并被它的强大功能逗乐了。

但是当我尝试将它与 bash 管道和反引号结合使用时,我卡住了。

这显然行不通:

scala> "echo `date`" !!
res0: String = "
"`date`
"

我尝试使用 bash 可执行文件来获得所需的行为:

scala> "bash -e echo `date`" !!
/bin/echo: /bin/echo: cannot execute binary file
java.lang.RuntimeException: Nonzero exit value: 126

我做错了什么?

编辑:

scala> "bash -ic 'echo `date`'" !!
`date`': unexpected EOF while looking for matching `''
`date`': syntax error: unexpected end of file
 java.lang.RuntimeException: Nonzero exit value: 1

【问题讨论】:

  • 信息丰富的例子,但我希望你意识到你根本不需要 bash:Seq("date")!!
  • @ToddOwen - 当然,这只是为了举例。

标签: bash scala


【解决方案1】:

实际上你做错了很多事情。您应该使用 bash 的 -c 选项,并且应该使用带有每个参数的 Seq[String] 来 bash 自己的字符串,或者 scala 库只会在每个空格字符处拆分字符串。 (这就是 Rex Kerr 的解决方案不起作用的原因。)

scala> import sys.process.stringSeqToProcess
import sys.process.stringSeqToProcess

scala> Seq("bash", "-c", "echo `date`")!!
res20: String = 
"Sun Dec 4 16:40:04 CET 2011
"

【讨论】:

  • 关于Seq 版本的要点。我实际上使用了那个,因为我总是这样做,并且从未检查过单字符串版本!
  • 这是另一个执行脚本并带有 args 的示例。 IE: test.sh echo $1 scala> Seq("/somePath/test.sh"," HI")!归功于这里:stackoverflow.com/questions/9039167/…
猜你喜欢
  • 2013-12-21
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 2013-11-15
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
相关资源
最近更新 更多