Я хочу запускать bash напрямую в интерактивном режиме, но не получать коды ANSI - PullRequest
0 голосов
/ 31 марта 2012

Я создаю свою собственную программу на основе Java, и она прекрасно работает с соединениями SSH и Telnet.Но теперь я хочу открыть локальное прямое соединение, например, xterm или gnome-terminal do.Я запускаю "bash -i -l" с ProcessBuilder и использую getInputStream () / getOutputStream (), и это похоже на работу.(Мне нужно вызвать redirectErrorStream (true)) Моя единственная проблема заключается в том, что bash, похоже, игнорирует переменную среды TERM и не генерирует никаких кодов ANSI.Я получаю подсказку, но при запуске 'ls -la' отсутствуют CR и цвет.Кроме того, он не отражает входные данные (как это происходит через соединение SSH).

Я использую библиотеку JCraft JCraft и вызываю setPtyType ("vt100") для соединений SSH.Как бы я это сделал при непосредственном запуске bash?

Я не использую pty, это нужно?Я думаю, что для распределения pty потребуется собственный код.Если да, то как работает pty.

Я пытался взглянуть на исходный код xterm, но это беспорядок.Теперь я помню, почему я никогда не вернусь к коду C.

Есть ли простое решение?

Спасибо.

1 Ответ

0 голосов
/ 16 июня 2012

Что касается ls, возможно, ваш ls является псевдонимом для ls --color=auto (вы можете проверить это, запустив alias ls в терминале).В этом случае ls сделает обоснованное предположение, выводить ли цветовые коды.С man ls:

Использование цвета для различения типов файлов отключено как по умолчанию, так и с параметром --color = never.С параметром --color = auto ls выдает цветовые коды только тогда, когда к терминалу подключен стандартный вывод.

Многие другие программы, вероятно, будут делать такие вещи.

Что касаетсяваши общие исследования терминальной эмуляции звучат так: «Терминатор», кажется, выполняет некоторую эмуляцию pty (хотя и с использованием библиотеки JNI), которую, возможно, вы можете получить от:

http://software.jessies.org/terminator/

...