Как открыть окна вкладок в Gnu-screen и выполнять команды внутри каждого

30

когда начинается сессия с именем, как это screen -S name1

я хочу, чтобы открыть окна вкладок в этом сеансе экрана, как при открытии вкладок в gnome-терминал, как это

gnome-terminal --tab -e "some commands"

так как это сделать?

Ахмед Заин Эль Дейн
источник
ОБА, я хочу знать, как открыть вкладки симлар для гнома, и хочу выполнить некоторую команду даже после того, как открою вкладку при запуске
Ахмед Заин Эль Дейн
Таким образом, метод, который я описал ниже, показывает вкладки, которые вы ищете тогда? Просто нужен способ запустить в них команду?
SLM
но на самом деле я начинающий, и я не понимаю, что именно вы хотите, чтобы я делал, я думал, что на экране есть синтаксис для открытия вкладок, но кажется, что вы добавите несколько строк в какой-то файл
Ахмед Зейн Эль Дейн
Хорошо, я понимаю, что вы хотите, чтобы я скопировал это и прошлое в этом файле у себя дома, но я спрашиваю о том, что screen -t name дает заголовок экрана, как я знаю, а также я хочу открыть эти вкладки в именованном сеансе например, screen -S name1 --tab -e "some commands"я надеюсь, вы понимаете, о чем я спрашиваю?
Ахмед Заин Эль Дейн
мммм это предопределенные вкладки с определенным числом, это не то, что я спрашиваю, сэр :) я не знаю, сколько вкладок мне нужно во время выполнения, что я хочу, это что-то похожее на команду терминала gnome, gnome-terminal --tab -e "commands " --tab -e " commands это откроет одно окно терминал с двумя вкладками, например, я имею в виду :) спасибо
Ахмед Зейн Эль Дейн

Ответы:

73

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 команды эха в каждой.

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команды, чтобы сначала выбрать одну из вкладок, а затем «вставить» в нее строку.

Скриншот

ss экрана с вкладками и командами

3. Создание # 2 без использования .screenrcфайла

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

  1. создать сеанс экрана
  2. загрузить его с помощью вкладок
  3. каждая вкладка запускает свои собственные команды
  4. не требует .screenrcфайла

Тогда это для вас! Будьте готовы, хотя. Это может быть немного сложно с командной строкой.

Для начала давайте создадим сеанс экрана:

$ screen -AdmS myshell -t tab0 bash

Выключатели -AdmS делают следующее:

(См. Экранную страницу man для более подробной информации)

    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

-d -m

    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.

Если мы подключимся к сеансу экрана myshell и перечислим вкладки, которые в нем содержатся, мы увидим следующее:

$ screen -r myshell

Нажмите эту комбинацию клавиш: Ctrl+ с Aпоследующим Shift+"

Num Name                                                                   Flags

  0 tab0                                                                       $
  1 tab1                                                                       $
  2 tab2                                                                       $
  3 tab3                                                                       $

Переключение на tab2 :

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 или даже сценариев оболочки, это просто для демонстрации возможностей и демонстрации пути!

Ссылки

SLM
источник
2
Если я не пропустил Q, он хочет выполнить команду при запуске сеанса. Обычноscreen "cd /foo/bar/; summon_cthulhu;" <<-- in that screen session
Runium
Вы думаете, что он имеет в виду, открыть экран с вкладками и запустить команду внутри одного из них?
SLM
Да. Запустите некоторую команду оболочки при запуске в пределах экрана, как обычно, когда вы входите в систему после загрузки и получаете Last login on ... Welcome to XXX, N new mails..... По крайней мере, так я прочитал заголовок Q.
Runium
Прочитайте его комментарии на Q, он хочет оба.
SLM
молодец, я бы тоже хотел проголосовать, но моя незначительная репутация помешала мне :)
Ахмед Заин Эль Дейн