Я хочу запускать bash напрямую в интерактивном режиме, но не получаю коды ANSI

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

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

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

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

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

Спасибо.


person Peter Quiring    schedule 31.03.2012    source источник


Ответы (1)


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

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

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

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

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

person Wivlaro    schedule 16.06.2012