Como abrir janelas de abas na tela Gnu e executar comandos dentro de cada uma

30

quando inicia a sessão com qualquer nome como este screen -S name1

Eu quero abrir abas janelas nesta sessão de tela como quando abas abertas no gnome-terminal como este

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

então como fazer isso?

Ahmed Zain El Dein
fonte
Tanto eu quero saber como abrir abas semelhante ao Terminal do GNOME e eu quero executar alguns, comando depois que eu aba aberta em tempo de execução
Ahmed Zain El Dein
Então a técnica que descrevi abaixo mostra as guias que você está procurando? Só precisa de uma maneira de executar um comando neles?
slm
mas na verdade eu sou iniciante e não entendo o que você quer que eu faça exatamente, pensei que há sintaxe para abrir abas na tela na janela, mas parece que adicionarei algumas frases a alguma coisa
Ahmed Zain El Dein
ok eu entendo que você quer que eu copie este e passado neste arquivo em minha casa, mas o que estou perguntando é a tela -t name atribui um título à tela como eu sei e também quero abrir essas guias em uma sessão nomeada por exemplo, screen -S name1 --tab -e "some commands"espero que você entenda o que estou perguntando?
Ahmed Zain El Dein
mmmm essas são abas pré-definidas com um certo número isso não é o que eu estou perguntando senhor :) eu não sei quantas abas eu preciso no tempo de execução o que eu quero é algo semelhante ao comando terminal gnome gnome-terminal --tab -e "commands " --tab -e " commands isso abrirá uma janela de terminal com duas guias, por exemplo i significa :) obrigado u
Ahmed Zain El Dein

Respostas:

73

1. Guias na tela

Você está procurando isso para adicionar ao seu arquivo .screenrc:

screen -t tab1
screen -t tab2

Aqui está um ótimo .screenrc básico para você começar com uma barra de status etc. NOTA: Normalmente, isso está localizado no seu diretório pessoal /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}]'

captura de tela

ss da sessão de tela

2. Guias na tela (com comandos executados dentro)

O exemplo .screenrcabaixo criará duas guias e executará 3 comandos de eco em cada uma.

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}]'

Essa técnica utiliza telas selecte stuffcomandos para selecionar inicialmente uma das guias e, em seguida, "enfiar" uma string nela.

captura de tela

ss da tela com guias e comandos

3. Criando # 2 sem usar um .screenrcarquivo

Se você está procurando o cenário em que pode:

  1. criar uma sessão de tela
  2. carregá-lo com guias
  3. cada guia executa seus próprios comandos
  4. não requer um .screenrcarquivo

Então este é o único para você! Esteja preparado embora. Este pode ficar um pouco complicado com as linhas de comando.

Para iniciantes, vamos criar uma sessão de tela:

$ screen -AdmS myshell -t tab0 bash

Os comutadores -AdmSfazem o seguinte:

(Veja a página de manual da tela para mais detalhes)

-UMA

    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 nome da sessão

    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.

Agora vamos começar a carregá-lo com guias + seus comandos:

$ 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

Esses 3 comandos criarão 3 guias adicionais e executarão o vim, executar ping no google e iniciar um shell bash. Se listarmos as sessões de tela, veremos o seguinte:

$ screen -ls
There is a screen on:
        26642.myshell   (Detached)
1 Socket in /var/run/screen/S-root.

Se nos conectarmos à sessão da tela, myshell , e listar as guias que ela contém, veremos o seguinte:

$ screen -r myshell

Hit esta combinação de teclas: Ctrl+ Aseguido por Shift+"

Num Name                                                                   Flags

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

Mudando para a 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

captura de tela

ss da tela iniciada a partir de cli

Os comandos acima são a maneira básica de realizar o que o OP estava procurando. É claro que isso pode ser condensado e refinado usando aliases do Bash ou mesmo scripts de shell; isso é apenas para demonstrar a capacidade e mostrar o caminho!

Referências

slm
fonte
2
Se eu não ler o Q, ele quer executar um comando no início da sessão. Normalmentescreen "cd /foo/bar/; summon_cthulhu;" <<-- in that screen session
Rúnio
Você acha que ele quer dizer, abrir uma tela com guias e executar um comando dentro de uma delas?
slm
Sim. Execute algum comando shell na inicialização na tela, normalmente como quando você faz login após a inicialização e obtém Last login on ... Welcome to XXX, N new mails..... Pelo menos é assim que eu leio o cabeçalho do Q.
Runium
Leia seus comentários sobre o Q, ele quer os dois.
Slm
bem feito, gostaria de votar-se também, mas o meu menor reputação me impediu :)
Ahmed Zain El Dein