如何在 Ubuntu 和 Windows (Cygwin) 中使用的 bash 脚本中设置 Java 类路径

How to set Java classpath in bash script used in Ubuntu and Windows (Cygwin)

我正在编写一个 bash 脚本,它应该执行一些需要特定类路径的 Java 应用程序。

此外,该脚本应该可以在 Ubuntu 和 Windows (Cygwin) 上执行。

问题: Windows 上的分隔符是“;”,Ubuntu 上的分隔符是“:”。这导致 Windows 上的 java -cp A.jar;B.jar Main(在使用 cygwin 时也是如此,因为它使用的是 Windows' java)和 Ubuntu 上的 java -cp A.jar:B.jar Main

问题: 如何在 bash 脚本中检测哪个底层操作系统是 运行 / 使用哪个 java 类路径分隔符?

一种幼稚(但实施起来很快)的方法:首先 运行 uname -a 并将其推送到一个变量中。然后检查该输出是否包含 "Ubuntu".

如果是这样,您应该使用“:”作为分隔符;除此以外 ”;”应该做。

并且如果你想为以后的其他平台做好准备;而不是做一个简单的if/else;您可能想查看 uname -a 在 cygwin 上有什么要说的;使用 bash switch 语句设置一些 $SEPARATOR_CHAR 变量。

仅提供最终解决方案:

我刚刚在 Ubuntu、Mac 和 Windows 运行 cygwin 上测试了 uname -s 并提出了以下脚本:

if [ "$(uname)" == "Darwin" ]; then
    # Do something under Mac OS X platform
    SEP=":"
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
    # Do something under GNU/Linux platform
    SEP=":"
elif [ "$(expr substr $(uname -s) 1 6)" == "CYGWIN" ]; then
    # Do something under Windows NT platform
    SEP=";"
fi