java - 如何检测java应用程序中运行JVM的终端

标签 java terminal command-line-interface

我正在创建一个小型 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/

相关文章:

Linux 文本匹配提示音

java - 是否可以记忆起 Java 中的 println?

java - 如果没有显式类型转换,语言可以是 "complete"吗?

java - Spring:获取 ManyToOne 实体时,引用实体 (OneToMany) 未显示在 JSON 中

bash - 有人可以解释一下这个 bash 命令吗?

c - 在术语中使用反引号打开时屏幕尺寸为 NULL

Java - 正则表达式将第一个和最后一个字符一次性替换为另一个字符

Java:使用 try-catch、empty-try-catch、dummy-return 进行错误处理

bash - & 与 docker exec 一起使用时返回不正确的 pid

ffmpeg - 使用 FFMPEG 从 MXF 转码到 mp4 时出错