отправка управляющих символов внешнему процессу в Java - PullRequest
1 голос
/ 13 декабря 2011

Я подключаюсь к / bin / bash в Ubuntu, используя:

process = Runtime.getRuntime().exec(cmd);

Здесь cmd - это строка с различными командами, которые я читаю и пишу из процесса.
Теперь я натолкнулсяСитуация, когда я подключаюсь к удаленным машинам, используя ssh и читая информацию о записи в ext процесс, для выхода из удаленного компьютера, я должен отправить управляющий символ, такой как:

CTRL + ], чтобы выйти из сеансаизящно и возвращаюсь к моей локальной машине.Предполагая, что cmd является строковым типом, как я могу записать этот CTRL символ в процесс?

1 Ответ

5 голосов
/ 13 декабря 2011

Control-] в ASCII эквивалентно 035 восьмеричным.В Java вы можете представить это как "\ 035".

Writer writer = new OutputStreamWriter(process.getOutputStream());
writer.write("\035");
writer.flush();

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

OutputStream os = process.getOutputStream();
os.write(29);
os.flush();

Я полагаю, Control-] имеет отношение к удаленной программе.Вы говорите о телнете?Однако запись «exit \ n» также закроет удаленный bash.

Writer writer = new OutputStreamWriter(process.getOutputStream());
writer.write("exit\n");
writer.flush();

Вы также можете, очевидно, закрыть OutputStream, который закрывает STDIN удаленного процесса.

os.close();
...