【发布时间】: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