运行scala shell脚本:没有任何反应

时间:2015-03-23 22:13:29

标签: scala shell

如果我在命令行中运行以下脚本(保存为jarAccessTest.sh,这是一个可执行文件),则没有任何反应:

#!/bin/sh
# exec scala -classpath "/usr/local/google/home/vvasuki/sanskritnlpjava/target/sanskritnlp-1.0-SNAPSHOT.jar " "$0" "$@"
exec scala "$0" "$@"
!#

# import sanskritnlp.transliteration._;
print "hello"

我看不到输出。没有。命令提示符也不会返回。

这里发生了什么?我必须输入Ctrl + C才能停止发生的任何事情。

编辑:在ubuntu 14.04中使用scala 2.9:http://i.imgur.com/VMYKnUX.png

3 个答案:

答案 0 :(得分:3)

您预先打包的Scala版本是很久以前的一个星系,远在很远的地方。

您最好从网站上下载最新的2.11.6。

scala运行器运行脚本时,它会启动编译服务器进程。如果这个过程被剔除,你可能不得不将其杀死或运行fsc -shutdown以便很好地离开它。

您可以尝试在脚本中添加-nc选项以消除该因素,即scala -nc表示没有编译守护程序。

最后,如果你只是测试你的库,那么运行scala -cp my.jar并从REPL进行实验会更常见。或者如果您正在使用SBT,请从那里启动控制台。

匿名建议添加:"他们认真地让你在这里输入任何东西"

我将从另一个答案中附加建议来运行fsc -verbose。请注意,他们威胁要停止支持fsc,因为它有问题,当它们发生时令人抓狂。出于这个原因,我更喜欢scala -nc进行简短测试,scalac -d script.jar script.scala,其中脚本是App

答案 1 :(得分:1)

原始计算机上的问题从未真正解释过,但有人指出使用'-nc'标志有效。

原始问题可能与编译守护程序打开端口的能力有关。从fsc的手册页:

  

第一次执行时,守护程序会自动启动。   在后续运行中,可以重用相同的守护程序,从而加快编译速度。该工具在重复时特别有效   用相同的类路径编译,因为          编译守护程序可以重用编译器实例。

检查这是否是问题的一种方法是使用verbose标志自行运行fsc。例如,使用

创建一个名为hello.scala的脚本
  

的println( “你好”)

在其中,然后运行

  

fsc -verbose hello.scala

如果这表明编译服务器无法连接,则表明您的问题已解决。在这种情况下尝试的第一件事是检查您的主机文件是否是犹太教。

(我有类似的问题,这就是我发现的)。

答案 2 :(得分:0)

您需要对代码进行一些更改,主要是在#line上,而不是scala中的注释。

#!/bin/sh
# exec scala -classpath   "/usr/local/google/home/vvasuki/sanskritnlpjava/target/sanskritnlp-1.0-  SNAPSHOT.jar " "$0" "$@"
exec scala "$0" "$@"
!#

// import sanskritnlp.transliteration._;
print ("hello\n")