![Cómo abrir ventanas de pestañas en Gnu-screen y ejecutar comandos dentro de cada una](https://rvso.com/image/31669/C%C3%B3mo%20abrir%20ventanas%20de%20pesta%C3%B1as%20en%20Gnu-screen%20y%20ejecutar%20comandos%20dentro%20de%20cada%20una.png)
cuando comienza la sesión se llama cualquier nombre como estescreen -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?
Respuesta1
1. Pestañas en pantalla
Está buscando esto para agregarlo 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:Normalmente se encuentra en su directorio personal /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
2. Pestañas en la pantalla (con comandos ejecutados dentro)
El siguiente ejemplo .screenrc
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 utiliza pantallas select
y stuff
comandos para seleccionar inicialmente una de las pestañas y luego "rellenar" una cadena en ella.
captura de pantalla
3. Creando el #2 sin usar un .screenrc
archivo
Si está buscando el escenario en el que pueda:
- crear una sesión de pantalla
- cárgalo con pestañas
- hacer que cada pestaña ejecute sus propios comandos
- no requiere un
.screenrc
archivo
¡Entonces éste es para tí! Pero prepárate. Esto puede resultar 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 -AdmS
hacen lo siguiente:
(Ver elpágina de manual de pantallapara más detalles)
-A
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, harán ping a google e iniciará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,mi concha, y lista 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 $
Cambiar apestaña2:
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
Los comandos anteriores son la forma básica de lograr lo que el OP estaba buscando. Por supuesto, esto se puede condensar y refinar usando alias de Bash o incluso scripts de shell, ¡esto es simplemente para demostrar la capacidad y mostrar el camino!
Referencias
Respuesta2
una pequeña adición a la respuesta. cosas primero repiten el comando, luego lo colocan en la línea de comando y luego lo ejecutan si \n o ^M terminan la línea.
Como el eco me molestó, encadené \nclear\n como último comando, por lo que la ventana de la pantalla comienza limpia.