从Scala REPL访问Cygwin路径

时间:2014-08-27 21:27:59

标签: scala cygwin read-eval-print-loop

我正在我的Windows机器上设置Scala,并尝试从Cygwin运行它。我能够启动REPL并执行命令,但是当我尝试预加载文件(-i)时,我被告知该文件不存在:

$ scala -i /home/username/preload.scala
That file does not exist

Welcome to Scala version 2.11.2 (Java HotSpot(TM) Client VM, Java 1.7.0_02).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

现在,该文件确实存在于终端中:

$ [ -f /home/username/preload.scala ] && echo EXISTS
EXISTS

但是Scala找不到它。事实证明,Scala使用的是Windows目录root,而不是Cygwin的:

scala> Files.newDirectoryStream(Paths.get("/")).asScala.foreach{println}
\$Recycle.Bin
\cygwin
\Documents and Settings
\Drivers
\Program Files
\Program Files (x86)
\ProgramData
\Recovery
\System Volume Information
\Users
\Windows

但现在我有点失落。如何告诉Scala REPL使用Cygwin路径,或者相反如何配置Cygwin以正确启动Scala?

2 个答案:

答案 0 :(得分:0)

你不能。

对于类路径,在启动器脚本中完成了一些cygwin转换,但它没有执行文件参数。

将scala file.scala和scala pkg.Main视为不明确。

编辑:也许它值得一个功能请求,因为除了-i处理之外,你可以尝试检测要转换的文件路径(斜杠和冒号)。

(当然,这与普通Java的条件相同。)

答案 1 :(得分:0)

遗憾的是,这是预期的行为,详见Using Cygwin effectively页面:

  

Windows程序不了解POSIX路径名,因此引用文件系统的任何参数都必须采用Windows(或DOS)格式或翻译。

在某些情况下,cygpath实用程序可用于解决此问题,但这在Scala REPL中不起作用,并且需要在其他跨平台脚本中显式处理Cygwin环境。