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 都可以使用它。
考虑以下 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 都可以使用它。