Cómo adjuntar una pantalla gnu sin saber el número tty

Después de iniciar múltiples sesiones de pantalla gnu con

screen -S name1 screen -S name2 

Me gustaría adjuntarles de forma selectiva. Si lo hago

 screen -D -R name1 

no se adjuntará sino que se imprimirá:

 There are several suitable screens on: 6799.name1 (08.02.2013 15:47:23) (Detached) 3661.name2 (08.02.2013 13:43:25) (Detached) Type "screen [-d] -r [pid.]tty.host" to resume one of them. 

Obviamente funciona si escribo:

 screen -D -R 6799.name1 

Pero me gustaría adjuntar sin saber el número de tty, porque quiero iniciar las sesiones de pantalla con un script que toma el nombre como argumento. Sin saber el número de tty en este momento, necesitaría copyr a mano este número cada vez que quiera volver a conectarlo más tarde.

Una solución obvia sería extraer el número tty de la salida de pantalla anterior utilizando operaciones de cadena. Pero eso parece un poco incómodo. ¿Hay alguna forma de indicarle a la pantalla que se una a una session nombrada específica, cualquiera que sea el número tty?

Tenga en count que probé las diferentes combinaciones [-d|-D] [-r|-R] mencionadas en las páginas man.


Nota agregada:

Creo las sesiones de pantalla separadas en un script usando ssh con

 ssh -t ${host} " screen -S \"$exefile\" -t \"$exefile\" -R "nice -n$prio \"$exefile\" ${exeparams[@]}"; exit 0"; 

Más tarde bash conectarme usando

 ssh -t ${host} " screen -D -R -S \"$exefile\" && echo \"finished.\"; exit"; 

donde $exefile es el nombre del ejecutable y la session de pantalla a la que quiero conectarme.

Como soy el único que se conecta a mis sesiones de screen y, a veces, quiero que más de una console esté conectada (a la modalidad de pantalla múltiple) a una session a la vez, utilizo el -x .

 # screen -S hosts # screen -ls There is a screen on: 12828.hosts (Detached) 1 Socket in /var/run/screen/S-uther. # screen -x hosts 

Desde la man 1 screen

  -x Attach to a not detached screen session. (Multi display mode).Screen refuses to attach from within itself. But when cascading multiple screens, loops are not detected; take care. 

Esto debería funcionar:

 screen -S name1 -D -R 

La única solución confiable que encontré fue el método de fuerza bruta descrito en la pregunta. Para conectarse a una pantalla existente con el nombre $exefile en $host remoto a través de ssh, o para crear uno nuevo si no existe, uno puede usar (en un shell bash):

 ssh -t $host " echo \"done.\" && echo \"itentifying screen ...\" && myscreen=\`screen -list | sed -n \"s/^\\s*\\s\\([0-9]*\\.$exefile\\)\\s\\s*.*$/\\1/p\"\` && if [ "X\$myscreen" = "X" ]; then echo \"no existing screen session found, creating new\"; screen -S \"$exefile\"; else echo \"connecting to screen \$myscreen\"; screen -d -r \"\$myscreen\"; fi && echo \"finished.\"; exit"; 

La primera ejecución creará una nueva session en $host . Si la pantalla se separa con Ctrl+a,d el shell de inicio de session ssh se cierra. Si se emite el mismo command nuevamente, se volverá a conectar a la pantalla existente. Se pueden realizar varias sesiones de pantalla con diferentes nombres $exefile y se pueden volver a conectar de forma independiente. La magia la realiza sed que busca en la salida de screen -list de screen -list un nombre que coincida con el patrón [tty].name . Tenga en count que es posible que deba escapingse el nombre de pantalla si contiene caracteres especiales sed .