Respuestas:
Solo para ampliar lo que dijo Ansgar en caso de que no esté muy familiarizado con la pantalla gnu, es probable que tener múltiples "ventanas" en una sola sesión de pantalla logre lo que necesita.
ctrl+ a, ccreará una nueva "ventana" en su sesión de pantalla activa. Puede alternar entre varias ventanas (como indicó Ansgar) con ctrl+ a, npara la siguiente ventana, y ctrl+ a, ppara la ventana anterior.
ctrl+ a, "le dará una lista de todas sus ventanas abiertas.
El uso de estos atajos sencillos le permitirá cambiar entre diferentes terminales de manera muy rápida y fácil, logrando su objetivo sin usar múltiples sesiones de pantalla.
Si agrega la siguiente línea a ~ / .screenrc, siempre mostrará sus ventanas abiertas y cuál está seleccionada, por lo que no es necesario que recuerde en qué ventana se encuentra.
hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'
Esta es la línea hardstatus que me gusta usar, pero es completamente personalizable (vea la página de manual o busque en google "gnu screen hardstatus").
Hay muchas otras cosas que puede hacer con él (nombrando las diferentes ventanas abiertas, por ejemplo), por lo que vale la pena leer algunos tutoriales.
Aquí hay una pareja que encontré con una búsqueda rápida:
http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml
http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
Y, por supuesto, el más útil de todos:
# From your terminal:
$ man screen
Espero que ayude.
Mateo
Sí, screen
es muy probable que sea el camino a seguir. Ctrl+ a, nlo llevará a la siguiente ventana, Ctrl+ a, pa la anterior. Ctrl+ a, 0.. 9le permitirá cambiar a una pantalla en particular.
Lo que dicen los demás es correcto. Sólo quiero mencionar tmux
es una alternativa a screen
. Tienen comandos muy similares.
Ambos screen
y tmux
ofrecen múltiples ventanas para una sesión en ejecución, y esto es probablemente lo que desea.
tmux
además ofrece saltos entre varias sesiones (cada una con sus propias ventanas). Necesitarías eso muy raramente.
Aquí hay algunos enlaces a la documentación de la pantalla y un curso intensivo sobre tmux .
Después de tanto tiempo, hice un script para solucionar esta característica que faltaba por completo. Antes que nada necesita un fifo:
mkdir ~/.screen
mkfifo ~/.screen/pipe
Esta canalización con nombre es útil para la comunicación entre la sesión separada y la sesión "Principal sin pantalla".
Archivo sc (en $ PATH):
#!/bin/bash
CONFIGFILE=~/.screen/"$1""rc"
if [ ! -r $CONFIGFILE ] ; then
echo "Configurazione per $1 Assente" >&2
exit 1
fi
exec 3<> ~/.screen/pipe
if [ "$STY" != "" ] ; then
screen -d "$STY"
echo "$1" >&3
else
screen -r "$1" 2>/dev/null || screen -S "$1" -c $CONFIGFILE
while true ; do
read line <&3
screen -r "$line" 2>/dev/null || screen -S "$line" -c ~/.screen/"$line""rc"
done
fi
Un ejemplo de un "CONFIGFILE" es: ~ / .screen / Monitorrc
layout new Monitor
screen -t "bash" bash --login
split -v
focus next
split
focus bottom
screen -t "cv" sh -c "watch /usr/bin/cv -w"
split
focus bottom
screen -t "sys.log" sh -c "tail -F /var/log/sys.log"
focus up
focus up
resize 25
screen -t "top" sh -c "top"
focus left
El resultado es: cuando desea iniciar el tipo de pantalla:
sc Monitor
u otra sesión que quieras inventar, yo uso el trabajo de sesión para varias cosas
Ej: ~ / .screen / Workrc
layout new Work
screen -t "bash" bash --login
Ahora estamos en el Monitor de sesión, cuando escribimos:
sc Work
el monitor de sesión se separa y escribe "Trabajo" en la tubería nombrada. En consecuencia, el primer script sc avanza y adjunta la sesión "Trabajo".
El sc invocado desde la sesión Monitor se cierra.
Cuando separamos todas las sesiones, estamos en un bucle infinito, así que tenemos que hacer Ctrl-c para salir.
Puede hacer esto con un simple script de shell como
for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done
Supongamos que tiene pocas pantallas abiertas. Supongamos también que los tiene categorizados como trabajo y datos.
for i in {10..13}; do screen -S `printf data%02d $i`; done;
for i in {0..5}; do screen -S `printf work%02d $i`; done;
...
Al aplicar screen -ls
, deberías tener tus pantallas así
There are screens on:
81592.data13 (Detached)
81539.work04 (Detached)
81527.work02 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81533.work03 (Detached)
81488.work00 (Detached)
81607.ttys014.Mo (Attached)
81545.work05 (Detached)
81580.data11 (Detached)
81521.work01 (Detached)
81515.work00 (Detached)
12 Sockets in /var/folders/qs/cvlbhpr54fnb96vtx01bs9k00000gn/T/.screen.
Ahora vamos a aislar las pantallas separadas usando grep
.
screen -ls | grep Detached
Deberías obtener algo como esto
81592.data13 (Detached)
81539.work04 (Detached)
81527.work02 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81533.work03 (Detached)
81488.work00 (Detached)
81545.work05 (Detached)
81580.data11 (Detached)
81521.work01 (Detached)
81515.work00 (Detached)
Ahora seleccionemos los que desee (por ejemplo, datos), nuevamente usando grep
.
screen -ls | grep Detached | grep data
Esto aislará solo las pantallas de datos. Puede cambiar la palabra clave grep con expresiones regulares para buscar y personalizar su búsqueda.
81592.data13 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81580.data11 (Detached)
Afortunadamente, el resultado está bien estructurado y delimitado por tabuladores. Ahora vamos a dividir las columnas en campos y elegir el segundo campo usando cut
.
screen -ls | grep Detached | grep data | cut -d' ' -f2
Deberá presionar la ctrl+v
pestaña y luego insertar un tab
parámetro después del delimitador -d
. Los resultados deberían ser así.
81592.data13
81586.data12
81574.data10
81580.data11
Ahora empaque esto en un comando usando las ...
comillas y repita los resultados de esta manera. Compruebe siempre los comandos formulados primero antes de ejecutarlo realmente. solíaecho screen -r
for s in `screen -ls | \
grep Detached | grep data | \
cut -d' ' -f2`; do \
echo screen -r $s; \
done
Si todo va bien, pruébalo sin él echo
.
for s in `screen -ls | \
grep Detached | grep data | \
cut -d' ' -f2`; do \
screen -r $s; \
done
Voila Cada pantalla de la que se separa lo lleva a la siguiente.
Feliz proyección !!
Escribí un script de nodo para permitir al usuario seleccionar la sesión de pantalla para adjuntar desde una lista, usando las teclas de flecha. Lo hice un paquete npm. Puedes verlo aquí: comando de pantalla . O simplemente npm i -g screen-command
para probarlo, suponiendo que ya tenga node.js instalado. Después de instalar el paquete, use el comando sc
para invocar la lista de pantallas.
Espero que esto facilite el cambio a la pantalla exacta que deseas.
^a
a otra cosa, por lo que no es ridículamente molesto usar la edición de líneas de estilo emacs en bash, cualquier otra cosa. Yo uso^t
.