Как открыть вкладки окон в Gnu-screen и выполнить команды в каждой из них

Как открыть вкладки окон в Gnu-screen и выполнить команды в каждой из них

когда начинается сеанс с любым именем вроде этого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файла

Если вы ищете сценарий, в котором вы можете:

  1. создать сеанс экрана
  2. загрузите его вкладками
  3. каждая вкладка запускает свои собственные команды
  4. не требуется .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

Скриншот

ss экрана инициирован из cli

Вышеуказанные команды являются базовым способом достижения того, что искал OP. Конечно, это можно сжать и усовершенствовать с помощью псевдонимов Bash или даже скриптов оболочки, это просто для демонстрации возможностей и указания пути!

Рекомендации

решение2

небольшое дополнение к ответу. stuff сначала выводит команду, затем помещает ее в командную строку, а затем выполняет ее, если \n или ^M заканчивают строку.

так как эхо меня раздражало, я добавил \nclear\n в качестве последней команды, поэтому окно экрана становится чистым.

Связанный контент