.png)
Me gustaría tener algunas sesiones virtuales en una ventana de PuTTY y cambiar entre ellas rápidamente. ¿Cuál es la mejor manera de hacer eso? screen
? Sé que puedo desconectarme ctrl+ad
y luego volver a conectarme a una sesión diferente, pero parece mucho escribir.
Respuesta1
Solo para ampliar lo que dijo Ansgar en caso de que no esté muy familiarizado con gnu screen, tener múltiples "ventanas" en una sola sesión de pantalla probablemente logrará lo que necesita.
ctrl+ a, ccreará una nueva "ventana" en su sesión de pantalla activa. Puede cambiar entre varias ventanas (como indicó Ansgar) con ctrl+ a, npara la siguiente ventana, y ctrl+ a, ppara la ventana anterior.
ctrl+ a, "te dará una lista de todas tus ventanas abiertas.
El uso de estos sencillos atajos le permitirá cambiar entre diferentes terminales de forma muy rápida y sencilla, logrando su objetivo sin utilizar 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 necesita recordar 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 (consulte la página de manual o busque en Google "gnu screen hardstatus").
Hay muchas otras cosas que puedes hacer con él (por ejemplo, nombrar las diferentes ventanas abiertas), por lo que vale la pena leer algunos tutoriales.
Aquí hay un par 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
Respuesta2
Sí, screen
lo más probable es que sea el camino a seguir. Ctrl+ a, nte llevará a la siguiente ventana, Ctrl+ a, pa la anterior. Ctrl+ a, 0.. 9le permitirá cambiar a una pantalla en particular.
Respuesta3
Después de tanto tiempo, creé un script para solucionar esta característica que faltaba por completo. En primer lugar, necesita un quince:
mkdir ~/.screen
mkfifo ~/.screen/pipe
Esta canalización con nombre es útil para la comunicación entre la sesión desconectada y la sesión "principal sin pantalla".
ArchivoCarolina del Sur(en $RUTA):
#!/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 quieras iniciar la pantalla, escribe:
sc Monitor
u otro sessionrc que te guste inventar, uso el Session Work 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 canalización con nombre. En consecuencia, el primer script sc avanza y adjunta la sesión "Trabajo".
El sc invocado desde el cierre del Monitor de sesión.
Cuando desconectamos todas las sesiones, estamos en un bucle infinito, por lo que tenemos que presionar Ctrl-c para salir.
Respuesta4
Puedes hacer esto con un script de shell simple 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 aislemos las pantallas separadas usando
grep
.screen -ls | grep Detached
Deberías conseguir 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á sólo 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)
Por suerte, el resultado está bien estructurado y delimitado por tabulaciones. Ahora dividamos las columnas en campos y elijamos el segundo campo usando
cut
.screen -ls | grep Detached | grep data | cut -d' ' -f2
Deberá presionar ctrl+v
y luego tab para insertar un tab
después del parámetro delimitador -d
. Los resultados deberían ser así.
81592.data13
81586.data12
81574.data10
81580.data11
Ahora empaquete esto en un comando usando las
...
comillas y recorra los resultados de esta manera. Siempre verifique primero los comandos formulados antes de ejecutarlos. 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
echo
.for s in `screen -ls | \ grep Detached | grep data | \ cut -d' ' -f2`; do \ screen -r $s; \ done
Listo. Cada pantalla de la que te separas te lleva a la siguiente.
¡¡Feliz proyección!!