Я пытаюсь реализовать эмулятор терминала в Java.Предполагается, что он сможет разместить и cmd.exe в Windows, и bash в Unix-подобных системах (я хотел бы поддерживать по крайней мере Linux и Mac OS X).У меня проблема в том, что и cmd.exe
, и bash
повторяют на своем стандартном выходе все, что я посылаю на их стандартный ввод.
Например, в bash я набираю "ls
", нажимаю вводв этот момент эмулятор терминала отправляет входную строку в stash bash и очищает поток.Затем процесс снова выводит строку ввода "ls\n
", а затем вывод команды ls
.
Это проблема, поскольку другие программы, кроме bash
и cmd.exe
, несделай это.Если я запускаю внутри bash или cmd.exe
команду "python -i
", интерактивная оболочка python не повторяет ввод, как bash
и cmd.exe
.Это означает, что обходной путь должен знать, из какого процесса получен фактический результат.Я сомневаюсь, что именно так работают эмуляторы терминала.
Запуск "bash -i
" не меняет этого поведения.Насколько я знаю, cmd.exe
не имеет различных "интерактивных" и "неинтерактивных" режимов.
РЕДАКТИРОВАТЬ: Я создаю хост-процесс с использованием ProcessBuilder
учебный класс.Я читаю stdout и stderr и пишу в stdin процесса, используя технику, похожую на stream gobbler .Я не устанавливаю переменные окружения перед тем, как запустить хост-процесс.Точные команды, которые я использую для запуска процессов: bash -i
для bash и cmd
для cmd.exe.Я постараюсь опубликовать пример минимального кода, как только мне удастся его создать.