我正在创建一个小型 CLI java 应用程序。
我在 Windows 上管理一致的清屏功能时遇到一些麻烦。
我找到的所有解决方案都是基于检测操作系统。
类似于:
System.getProperty("os.name").indexOf("win") >= 0
并应用已记录的 Java: Clear the console 之一答案取决于是否是Windows。
这种方法的缺点是,如果您在 cmd、git-bash 或 Cygwin 终端中运行 Java 应用程序,则清晰屏幕的工作方式不同。您不能在 git-bash 中应用 cmd 清屏,反之亦然。
基于此,我更愿意检测我正在运行的终端。
我想检查 Linux 特定命令是否会失败,使用 ProcessBuilder 作为检测我是否位于 cmd 终端的方法,但我能想到的所有命令也存在于 cmd 终端中:ls, grep、awk。这可能是因为我安装了 WSL(Windows Linux 子系统),但我不确定。
有没有办法检测运行 JVM 的终端?
最佳答案
实现此目的的一个简单方法是内省(introspection)系统进程的环境变量。
您可以使用 ProcessBuilder 通过检查 PS1 环境变量是否已定义来实现此目的。
这是我发现的变量,它可能并不完全可靠,并且可能存在于您的 Windows 环境中。在这种情况下,请在 ProcessBuilder.environment()
返回的集合中找到另一个。
ProcessBuilder pb = new ProcessBuilder();
if(pb.environment().containsKey("PS1")) {
System.out.println("non Windows console");
} else {
System.out.println("Windows console");
}
关于java - 如何检测java应用程序中运行JVM的终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62108747/