【问题标题】:Trying to get terminal $COLUMNS in Java [duplicate]试图在 Java 中获取终端 $COLUMNS [重复]
【发布时间】:2013-12-04 19:39:55
【问题描述】:

我目前正在尝试获取终端在 Java 中的列数。为此,我知道有一个环境变量 $COLUMNS,所以我尝试运行“echo $COLUMNS”并读取它的输出,但由于某种奇怪的原因,我得到了一个没有意义的值,最重要的是,我总是得到相同的值,无论我如何调整终端的大小。

这是我的代码:

public static final String[] COLS = {"/bin/sh", "-c", "echo $COLUMNS </dev/tty"};

    public int getColumns(){
    try{
        Process p = Runtime.getRuntime().exec(CONST.COLS);
        p.waitFor();
        InputStreamReader in = new InputStreamReader(p.getInputStream());
        int cols = in.read();
        return cols;
    }catch(Exception e){
        System.out.println(e);
    }
    return 0;
    }

【问题讨论】:

  • 您正在将 STDIN 重定向到来自 /dev/tty 的“echo”命令,这是行不通的。如果你只是在命令行输入echo $COLUMNS会发生什么?
  • 打印列数。那我该怎么办?没有 /tty 试过了,还是不行。
  • 恐怕我不懂Java,所以我不确定我是否真的能提供更多帮助。但是,$COLUMNS 是 Bash 中的一个功能,而不是 Bourne shell,因此请尝试将 /bin/sh 更改为 /bin/bash(或系统上的任何路径)。

标签: java bash terminal width environment-variables


【解决方案1】:

尝试运行tput 命令。

获取列数:

tput cols

tput 的手册页。

【讨论】:

  • 同样的问题,现在给了我另一个值,但仍然不是正确的,仍然是一个常数。
  • 直接使用 tput 是不行的。我总是得到 80。解决方案是使用重定向魔法。见stackoverflow.com/questions/1286461/…
猜你喜欢
  • 2020-06-25
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
相关资源
最近更新 更多