Я хочу запустить 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), которую, возможно, вы можете получить из следующих идей: