Cygwin:当 运行 在后台时,Scala 解释器突然退出

Cygwin: Scala interpreter quits abruptly when run in background

考虑以下 shell 函数:

run_in_background() {
  type scala
  java -version
  /cygdrive/c/Development/Software/scala-2.12.0/bin/scala -version
    scala -version
}

命令:run_in_background

输出:

Kshitiz.Sharma /cygdrive/c/Development/temp
$ run_in_background
scala is hashed (/cygdrive/c/Development/Software/scala-2.12.0/bin/scala)
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
Scala code runner version 2.12.0 -- Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc.
Scala code runner version 2.12.0 -- Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc.
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

命令:run_in_background &

输出:

Kshitiz.Sharma /cygdrive/c/Development/temp
$ run_in_background  &
[7] 12712
scala is hashed (/cygdrive/c/Development/Software/scala-2.12.0/bin/scala)

Kshitiz.Sharma /cygdrive/c/Development/temp
$ java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)


[7]+  Stopped                 run_in_background

我真的不知道为什么会这样。为什么 scala 解释器应该关心它是否在后台 运行?为什么会突然退出?

我在 Cygwin

上使用 bash

对路径的支持不一致,即某些路径在 Cygwin 下无法正确解释,这有点碰运气。尝试 cygpath 使您的路径 Windows 兼容。 另外:我对 Cygwin 发行版 Babun 有很好的体验。和你一样,我在 Windows 上开发 Scala。您可能想尝试一下。

if [ "$(expr substr $(uname -s) 1 6)" == "CYGWIN" ];then
    echo "Detected CYGWIN environment"
    #If running in cygwin then ensure paths are windows compatible
    SBT_LAUNCHER="`cygpath -w $SBT_LAUNCHER`"
fi

感谢@radumanolescu 为我指明了正确的方向。

Scala 带有两组脚本,一组用于 Linux,另一组用于 Windows。当您在 Cygwin window 中键入 scala 时,它将执行 Linux 脚本。

Cygwin 没有 100% 的兼容性,并且在 运行 这些脚本中并不总是成功,这就是其中一种情况。

修复是使用 windows 批处理文件而不是 linux shell 脚本。将此添加到 bash 配置文件:

scala() {
    scala.bat "$@"
}; export -f scala

export -f 导出函数,以便任何子 shell 都可以使用它。