Cómo abrir ventanas de pestañas en la pantalla Gnu y ejecutar comandos dentro de cada una

30

cuando comienza la sesión nombrada cualquier nombre como este screen -S name1

Quiero abrir ventanas de pestañas en esta sesión de pantalla como cuando abro pestañas en gnome-terminal como esta

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

Entonces, ¿cómo hacer esto?

Ahmed Zain El Dein
fuente
AMBOS Quiero saber cómo abrir pestañas similar a la Terminal de GNOME y quiero ejecutar algunos les mando en Después de la Primera pestaña abierta en Tiempo de Ejecución
Ahmed Zain El Dein
Entonces, ¿la técnica que describí a continuación muestra las pestañas que estás buscando? ¿Solo necesita una forma de ejecutar un comando en ellos?
slm
pero en realidad estoy comenzando y no entiendo lo que quieres que haga exactamente, pensé que hay una sintaxis para abrir pestañas en la pantalla en la ventana pero parece que agregaré algunas líneas a algún archivo
Ahmed Zain El Dein
ok, entiendo que quieres que copie esto y lo pasado en este archivo en mi casa, pero lo que estoy preguntando es sobre screen -t name da un título a la pantalla como lo sé y también quiero abrir esas pestañas en una sesión con nombre por ejemplo, screen -S name1 --tab -e "some commands"espero que obtengas lo que te pido.
Ahmed Zain El Dein
mmmm esas son pestañas predefinidas con un cierto número esto no es lo que le pregunto señor :) No sé cuántas pestañas necesito en el tiempo de ejecución lo que quiero es algo similar al comando del terminal gnome gnome-terminal --tab -e "commands " --tab -e " commands esto abrirá una ventana de terminal con dos pestañas, por ejemplo, quiero decir :) gracias
Ahmed Zain El Dein

Respuestas:

73

1. Pestañas en la pantalla

Está buscando esto para agregar a su archivo .screenrc:

screen -t tab1
screen -t tab2

Aquí hay un buen .screenrc básico para comenzar con una barra de estado, etc. NOTA: Esto generalmente se encuentra en su directorio de inicio /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 pantalla

ss de sesión de pantalla

2. Pestañas en la pantalla (con comandos ejecutados dentro)

El .screenrcsiguiente ejemplo creará 2 pestañas y ejecutará 3 comandos de eco en cada una.

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

Esta técnica hace uso de las pantallas selecty stuffcomandos para seleccionar inicialmente una de las pestañas y luego "meter" una cadena en ella.

captura de pantalla

ss de pantalla con pestañas y comandos

3. Crear # 2 sin usar un .screenrcarchivo

Si está buscando el escenario donde puede:

  1. crear una sesión de pantalla
  2. cargarlo con pestañas
  3. hacer que cada pestaña ejecute sus propios comandos
  4. no requiere un .screenrcarchivo

¡Entonces éste es para tí! Pero prepárate. Este puede ser un poco complicado con las líneas de comando.

Para empezar, creemos una sesión de pantalla:

$ screen -AdmS myshell -t tab0 bash

Los interruptores -AdmShacen lo siguiente:

(Vea la página del manual de la pantalla para más detalles)

-UNA

    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 nombre de sesión

    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.

Ahora comencemos a cargarlo con pestañas + sus 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

Estos 3 comandos crearán 3 pestañas adicionales y ejecutarán vim, ping google y lanzarán un shell bash. Si enumeramos las sesiones de pantalla, veremos lo siguiente:

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

Si nos conectamos a la sesión de pantalla, myshell , y enumeramos las pestañas que contiene, veremos lo siguiente:

$ screen -r myshell

Presione esta combinación de teclas: Ctrl+ Aseguido de Shift+"

Num Name                                                                   Flags

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

Cambiando 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 pantalla

ss de pantalla iniciada desde cli

Los comandos anteriores son la forma básica de lograr lo que estaba buscando el OP. Esto, por supuesto, se puede condensar y refinar utilizando alias Bash o incluso scripts de shell, ¡esto es simplemente para demostrar la capacidad y mostrar el camino!

Referencias

slm
fuente
2
Si no leo mal la Q, quiere ejecutar un comando al inicio de la sesión. Típicamentescreen "cd /foo/bar/; summon_cthulhu;" <<-- in that screen session
Runium
¿Crees que quiere decir, abrir una pantalla con pestañas y ejecutar un comando dentro de una de ellas?
slm
Sí. Ejecute algún comando de shell en el inicio dentro de la pantalla, generalmente como cuando inicia sesión después del arranque y obtiene Last login on ... Welcome to XXX, N new mails..... Al menos así es como leo el encabezado de la P.
Runium
Lea sus comentarios sobre la Q, quiere los dos.
slm
bien hecho, me gustaría votar también, pero mi reputación menor me lo impidió :)
Ahmed Zain El Dein