如何在 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
我正在编写一个 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