![Как открыть вкладки окон в Gnu-screen и выполнить команды в каждой из них](https://rvso.com/image/31669/%D0%9A%D0%B0%D0%BA%20%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8C%20%D0%B2%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B8%20%D0%BE%D0%BA%D0%BE%D0%BD%20%D0%B2%20Gnu-screen%20%D0%B8%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B%20%D0%B2%20%D0%BA%D0%B0%D0%B6%D0%B4%D0%BE%D0%B9%20%D0%B8%D0%B7%20%D0%BD%D0%B8%D1%85.png)
когда начинается сеанс с любым именем вроде этогоscreen -S name1
Я хочу открывать окна вкладок в этой экранной сессии, как при открытии вкладок в gnome-terminal, например так
gnome-terminal --tab -e "some commands"
так как же это сделать?
решение1
1. Вкладки на экране
Вам нужно добавить в файл .screenrc следующее:
screen -t tab1
screen -t tab2
Вот хороший базовый .screenrc, который поможет вам начать работу со строкой состояния и т. д.ПРИМЕЧАНИЕ:Обычно он находится в вашем домашнем каталоге /home/<username>/.screenrc
.
screen -t validate #rtorrent
screen -t compile #irssi
screen -t bash3
screen -t bash4
screen -t bash5
altscreen on
term screen-256color
bind ',' prev
bind '.' next
#
#change the hardstatus settings to give an window list at the bottom of the
#screen, with the time and date and with the current window highlighted
hardstatus alwayslastline
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'
Скриншот
2. Вкладки на экране (с командами, запущенными внутри)
В приведенном ниже примере .screenrc
будут созданы 2 вкладки и запущены 3 команды echo в каждой.
screen -t tab1
select 0
stuff "echo 'tab1 cmd1'; echo 'tab1 cmd2'; echo 'tab1 cmd3'^M"
screen -t tab2
select 1
stuff "echo 'tab2 cmd1'; echo 'tab2 cmd2'; echo 'tab2 cmd3'^M"
altscreen on
term screen-256color
bind ',' prev
bind '.' next
#
#change the hardstatus settings to give an window list at the bottom of the
#screen, with the time and date and with the current window highlighted
hardstatus alwayslastline
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'
Этот метод использует экраны select
и stuff
команды для первоначального выбора одной из вкладок, а затем «вставки» в нее строки.
Скриншот
3. Создание #2 без использования .screenrc
файла
Если вы ищете сценарий, в котором вы можете:
- создать сеанс экрана
- загрузите его вкладками
- каждая вкладка запускает свои собственные команды
- не требуется
.screenrc
файл
Тогда это для вас! Но будьте готовы. Здесь могут возникнуть некоторые сложности с командными строками.
Для начала давайте создадим сеанс экрана:
$ screen -AdmS myshell -t tab0 bash
Переключатели -AdmS
выполняют следующие функции:
(См.экранная страница руководстваБольше подробностей)
-А
Adapt the sizes of all windows to the size of the current terminal. By default, screen tries to restore its old window sizes when attaching to resizable terminals
-д -м
Start screen in "detached" mode. This creates a new session but doesn't attach to it. This is useful for system startup scripts.
-S имя_сеанса
When creating a new session, this option can be used to specify a meaningful name for the session. This name identifies the session for "screen -list" and "screen -r" actions. It substitutes the default [tty.host] suffix.
Теперь начнем загружать его вкладками + их командами:
$ screen -S myshell -X screen -t tab1 vim
$ screen -S myshell -X screen -t tab2 ping www.google.com
$ screen -S myshell -X screen -t tab3 bash
Эти 3 команды создадут 3 дополнительные вкладки и запустят vim, ping google и запустят оболочку bash. Если мы выведем список сеансов экрана, то увидим следующее:
$ screen -ls
There is a screen on:
26642.myshell (Detached)
1 Socket in /var/run/screen/S-root.
Если мы подключимся к сеансу экрана,мояшелли перечислим вкладки, которые он содержит, то увидим следующее:
$ screen -r myshell
Нажмите эту комбинацию клавиш: Ctrl+, Aа затем Shift+"
Num Name Flags
0 tab0 $
1 tab1 $
2 tab2 $
3 tab3 $
Переключение навкладка2:
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=443 ttl=55 time=41.4 ms
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=444 ttl=55 time=33.0 ms
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=445 ttl=55 time=30.1 ms
Скриншот
Вышеуказанные команды являются базовым способом достижения того, что искал OP. Конечно, это можно сжать и усовершенствовать с помощью псевдонимов Bash или даже скриптов оболочки, это просто для демонстрации возможностей и указания пути!
Рекомендации
решение2
небольшое дополнение к ответу. stuff сначала выводит команду, затем помещает ее в командную строку, а затем выполняет ее, если \n или ^M заканчивают строку.
так как эхо меня раздражало, я добавил \nclear\n в качестве последней команды, поэтому окно экрана становится чистым.