我是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:
根据汤姆的回应,我已经修改了上面的代码,如下所示,它现在可以正常工作,并且可以在控制台中使用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.!
}
}
执行上述代码后,我没有任何控制台输出。如果我错过了任何事情,请告诉我。谢谢。
答案 0 :(得分:0)
假设使用Linux,可以从一个简单的"pwd"!
开始,它将显示工作目录,然后使用相对或绝对路径调用Shell脚本。例如:
import sys.process._
object POC extends App{
val path = "pwd".!!.trim
println(path)
s"$path/src/main/bin/test.sh".!
"src/main/bin/test.sh".!
}
返回:
/home/user/temp/scala-shell-script
Hello shell
Hello shell
顺便说一句,shell脚本通常在shebang行中包含#!/bin/sh
(不是#!/bin
):
#!/bin/sh
echo "Hello shell"