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

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

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

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

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

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

Благодарю.

1 ответ

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

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

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

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

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

Другие вопросы по тегам