Запуск команд оболочки в коде Scala в Windows, похоже, требует полного абсолютного пути команды

когда я пытаюсь запустить команды оболочки на Mac, он работал так, как ожидалось:

scala> import scala.sys.process._
import scala.sys.process._

scala> """protractor --version"""!
warning: there were 1 feature warning(s); re-run with -feature for details
Version 0.24.0
res12: Int = 0

scala>

но если я сделаю это на Windows, я получу это:

scala> import scala.sys.process._
import scala.sys.process._

scala> """protractor --version"""!
warning: there were 1 feature warning(s); re-run with -feature for details
java.io.IOException: Cannot run program "protractor": CreateProcess error=2, The system cannot find the file specified
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)

кажется, что я должен сделать это так в Windows:

scala> import scala.sys.process._
scala> """C:\Users\twer\AppData\Roaming\npm\protractor.cmd --version"""!
warning: there were 1 feature warning(s); re-run with -feature for details
Version 0.24.0
res11: Int = 0

scala>

Я должен предоставить полный абсолютный путь команды.

но я уверен, что команда доступна только в путь.

есть ли возможность избежать этого?

1 ответов


вы можете попробовать это:

val command = Seq("protractor", "--version")
val os = sys.props("os.name").toLowerCase
val panderToWindows = os match {
  case x if x contains "windows" => Seq("cmd", "/C") ++ command
  case _ => command
}
panderToWindows.!