Как написать скрипты, создающие несколько окон терминала, например tmux?

ifconfigв наши дни считается устаревшим. Вместо этого попробуйте использовать инструмент ip. Все последние дистрибутивы должны его поддерживать, это часть набора инструментов iproute.

Если вам просто нужен дополнительный IP-адрес на интерфейсе, используйте следующую команду:

ip addr add 10.50.55.130/24 dev eth0

И я согласен с комментарием Йохана Мирена к вашему вопросу.

2
28.10.2019, 13:23
1 ответ

Я думаю, можно с уверенностью сказать, что это невозможно сделать только с помощью bash. Вам понадобится либо более высокий язык программирования, такой как perl/python, либо управление экземпляром tmux с помощью скрипта.

Вот краткий обзор задействованной технологии:

  • Чтобы запустить программу в терминальной среде, которую она ожидает, вам необходимо создать псевдо--терминал (pty)для ее размещения.
  • pty создаются и управляются с помощью системных вызовов, таких как ioctl , и имеют API довольно низкого -уровня.
  • Чтобы сделать что-то вроде tmux, вам нужно будет постоянно читать управляющую -сторону каждого pty, а затем соединять эти части вместе на терминале основной программы, используя специальные escape-коды терминала
  • Возможности терминала (т. е. управляющие последовательности, поддерживаемые терминалом для позиционирования курсора, полужирного шрифта/цвета/подчеркивания и т. д. )имеют сотни вариантов, поэтому, если вам нужна какая-либо совместимость, вы захотите использовать библиотеку например ncurses , чтобы помочь вам настроить дополнительные -окна.

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

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

bash может находить различные управляющие последовательности терминала из команды tput, и вы действительно можете писать bash-скрипты, которые отображают окна текста, но без ncurses это трудно сделать правильно и пересечь -платформу, и это займет тонны вашего времени.

Короче говоря, я не думаю, что вы можете сделать это с помощью простых инструментов bash и posix.

Perl установлен почти на всех unix-системах, и perl может выполнять ioctlвызовы,так что да, это должно быть возможно написать на Perl даже без установки каких-либо дополнительных модулей. Однако, опять же, я ожидаю, что это займет слишком много времени, по крайней мере, без использования некоторых дополнительных вспомогательных модулей, таких как IO ::Pty и Curses . Но даже при всем этом предстоит много работы.

Думаю, вам лучше всего попробовать написать скрипт tmux . Я не делал этого раньше, но в этом посте создается впечатление, что проект длится несколько -дней, а не несколько -недель -и -тонн --учебного проекта.

Если ваше основное возражение связано с необходимостью установки tmux, вы можете попробовать загрузить и скомпилировать статический двоичный файл tmux, а затем распространить его со своим скриптом. Статический двоичный файл не зависит от какой-либо библиотеки в системе и должен работать на любом современном ядре Linux с правильной архитектурой. Вы даже можете скомпилировать двоичные файлы для нескольких архитектур, а затем определить, какой двоичный файл использовать.

3
27.01.2020, 22:08

Теги

Похожие вопросы