`tput cols` всегда возвращает значение по умолчанию 80JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 `tput cols` всегда возвращает значение по умолчанию 80

Сообщение Anonymous »

Несколько лет назад я создал библиотеку для рендеринга в терминале.
При повторном запуске в 2025 году она частично сломалась.
Вот небольшой пример, который изолирует проблему. :

Код: Выделить всё

TerminalCols.java

Код: Выделить всё

package p5_terminal_graphics_examples;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class TerminalCols {

public static void main(String[] args) {
while (true) {
int cols = cols();
System.out.println("Terminal columns: " + cols);

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

static public int cols() {
return Integer.parseInt(cmd("tput cols"));
}

static public String cmd(String args) {
return exec("sh", "-c", args);
}

static public String exec(String... cmd) {

try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();

Process p;

p = Runtime.getRuntime().exec(cmd);

int c;
InputStream in = p.getInputStream();

while ((c = in.read()) != -1) {
bout.write(c);
}

in = p.getErrorStream();

while ((c = in.read()) != -1) {
bout.write(c);
}

p.waitFor();

String result = new String(bout.toByteArray());
return result.trim();
}
catch (IOException | InterruptedException e) {
return null;
}

}
}
Приведенный выше код должен выводить количество столбцов, которые терминал имеет каждую секунду.
Однако он всегда печатает значение по умолчанию — 80.
Если я напрямую набираю tput cols в терминале, то он всегда возвращает правильный ответ.
Поэтому со временем что-то сломалось, и я не знаю, как дальше выяснять, как чтобы это исправить. Любая помощь будет приветствоваться.

Подробнее здесь: https://stackoverflow.com/questions/793 ... default-80
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»