【发布时间】:2019-03-28 18:34:21
【问题描述】:
我是 Scala 编程的新手。我有一个.sh file。我想使用 Scala 运行这个文件。我已经尝试了以下链接中提供的解决方案。但这些对我不起作用。
Execute shell script from scala application
我在 scala REPL 中尝试过简单的 echo 命令,它工作正常。但是当我在 Scala 程序中使用同一行代码时,我得到了java.io.IOException,如下所示。
Exception in thread "main" java.io.IOException: Cannot run program "echo": CreateProcess error=2, The system cannot find the file specified
我的示例代码如下所示
import java.io._
import sys.process._
object POC {
def main( args: Array[String]) {
val p = "echo 'hello world'".!!
println("############################################# "+ p)
}
}
EDIT:
根据 Tom 的回复,我已经修改了上面的代码,如下所示,现在可以正常工作并在控制台中获取 Hello world。
import java.io._
import sys.process._
object POC {
def main( args: Array[String]) {
val p = Seq("echo", "hello world")
val os = sys.props("os.name").toLowerCase
val panderToWindows = os match {
case x if x contains "windows" => Seq("cmd", "/C") ++ command
case _ => command
}
panderToWindows.!
}
}
现在我的确切问题是执行我的 script.sh 文件。 我有如下目录。
src
- bin
- script.sh
- scala
- POC.scala
script.sh 代码:
#!/bin
echo "Hello world"
我的 POC.scala 包含以下代码。
import java.io._
import sys.process._
object POC {
def main( args: Array[String]) {
val command = Seq("/bin/script.sh")
val os = sys.props("os.name").toLowerCase
val panderToWindows = os match {
case x if x contains "windows" => Seq("cmd", "/C") ++ command
case _ => command
}
panderToWindows.!
}
}
执行上述代码后,我没有得到任何控制台输出。如果我错过了什么,请告诉我。谢谢。
【问题讨论】:
-
您使用的是哪个 scala 版本?我运行了相同的代码并得到了正确的输出。我正在使用 scala 版本 2.12.4
-
@ChaitanyaWaikar 我正在使用 Scala 2.11.2。我使用的版本有问题吗?当我通过 scala REPL 执行时它工作正常,但无法通过 scala IDE 执行。
-
也许你正面临这个问题:stackoverflow.com/questions/24320446/…
-
您的代码对我来说编译和运行良好。尝试输入
echo程序的完整路径:/bin/echo(或您系统上的任何内容。) -
@Tom - 感谢您的回复。它适用于像“echo”这样的简单 linux 命令。但是当我尝试执行 .sh 文件时它不起作用。有什么想法吗?
标签: scala