java processbuilder 终端宽度

java processbuilder terminal width

所以我有一个 shell 脚本,当执行一个可执行文件时,它会显示与终端宽度一样宽的行。当我使用 ProcessBuilder 执行脚本时,它会自动 returns 只有前 80 个字符。我尝试了多种方法,例如向脚本添加 stty rows 50 cols 132,或者尝试在 ProcessBuilder 中设置一些环境变量,但找不到更改进程终端宽度的方法。 运行 这在 RHEL 上。

    ProcessBuilder p = new ProcessBuilder(new String[] {"/bin/ksh",
    "myscript.ksh"});

    BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream()));
    String line;
    StringBuffer output = new StringBuffer();
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }

终端宽度由您使用的终端程序决定。每个终端程序都让您以不同的方式设置宽度(通常在某处的设置中)。如果它们响应任何类型的全局变量或命令序列,那么每个终端程序可能会有所不同(有些没有此功能)。但是有一些终端程序采用的标准解决方案。

唯一的方法是找到一个终端程序,它确实响应特定的全局变量或命令序列,并强制您的用户使用该特定终端程序调用应用程序。

最接近标准的解决方案是以下控制序列,它将调整某些终端仿真器的大小:

System.out.println("\e[8;50;100t")

以上会将您的终端调整为 100x50

然而,以上内容并不适用于所有终端仿真器,有几个终端仿真器可以识别它。只需要确保用户使用的是支持该标准的终端程序即可。

有关详细信息,请参阅 XTerm Control Sequences 参考资料。