Вы можете использовать escape-последовательности для выполнения различных действий на терминале linux.Вы можете узнать об этом из следующих ссылок:
Управление терминалом напрямую с помощью escape-последовательностей очень сложно, потому что вы должны иметь дело со всеми видами пограничных случаев и побочных эффектов, в зависимости от фактического содержимого терминала итип текста, который вы отображаете на нем (ASCII, UTF-8 или другие экзотические варианты ...)
Ваш вариант использования делает его еще более сложным, так как вы должны сначала определить содержимое терминала, созданного несвязанными командаминапример, grep
, но также в зависимости от конкретной ширины и высоты терминала, приглашения оболочки и т. д.
Как соавтор и сопровождающий qemacs , я могу рассказать вам, какбольшая часть полного кошмара это было, чтобы заставить буфер процесса вести себя правильно, обрабатывая вывод оболочки и программ, а также ввод данных пользователем прозрачным образом, в то же времявремя сделать все это содержимое свободно редактируемым в буферах и окнах редактора.Вы можете посмотреть исходные файлы tty.c и shell.c , если вы не слабонервны.
Поэтому я призываю вас пересмотреть свою проблему сдругой угол:
- Чего вы пытаетесь достичь?
- Можете ли вы сделать это, отфильтровав выходные данные команд?
- Можете ли вы сделать это, создав псевдонимы оболочкиили сценарии оболочки, которые будут обрабатывать вывод команд?
- Можете ли вы использовать emacs, qemacs или какую-либо другую интегрированную среду оболочки с поддержкой для достижения желаемой функциональности?