¿Cómo incluir el nombre de sesión de la pantalla en hardstatus?


17

Utilizo diferentes sesiones de pantalla para diferentes proyectos. Pantalla de inicio como screen -S project1. Ahora, me gustaría mencionar 'project1' en la línea hardstatus.

Nombre de la sesión se puede obtener a partir de la variable de entorno STY: STY=13539.project1.
¿Pero cómo llevar esto a la pantalla? He intentado el comando de retroceso y% `en estado duro, pero parece que no puedo hacerlo bien.

Lo que hice:

.screenrc:

hardstatus string '%H:%`'
backtick 0 30 30 echo $STY

sin suerte, vacio% `.

backtick 0 30 30 sessionname

sigue sin suerte, nombre de sesión: no encontrado

Respuestas:


18

Puede incluir esta cadena (con información adicional, si lo desea) en su $PS1:

\[\e]0;$STY\007

dentro de comillas simples para retrasar la evaluación de la variable. Luego agregue esto a su ~/.screenrc:

hardstatus string '%H:%h'

Desafortunadamente, screenno se establece $STYen el entorno de los comandos que genera para la backtickfunción.

Otra opción, en lugar de la anterior:

hardstatus string '%H:%`'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

La ventaja de este es que sigue los cambios realizados mediante el sessionnamecomando. La primera opción no lo hace.

Editar:

Desde aquí :

Como $ STY aún no está configurado cuando la fuente de pantalla .screenrc, puedes usar este truco en tu .screenrc:

    screen 
    screen $SHELL -c 'screen -X caption always "$STY"' 

Es decir, enviar un comando de pantalla a la primera ventana.


1
Para la solución que comienza con backtick: (1.) ¿es backtickun bash incorporado? un comando gnu-screen? un ejecutable binario? ¿hay una página de manual? (2.) Sé que funciona porque lo probé, pero ¿cómo se ejecuta un comando de dos líneas cuando parece que la .screenrcsintaxis de gnu-screen requiere una línea para el hardstatuscomando? (3.) ¿cómo modificaría su comando para permitir agregar texto después del nombre de la sesión?
Trevor Boyd Smith

@TrevorBoydSmith: backtickes un screencomando. Búscalo en la página del manual para screen. Puede ser mejor si publica una nueva pregunta sobre el resto de lo que está preguntando. No creo que la salida de estado duro pueda ocupar dos líneas en la pantalla. Podría usar sedo en awklugar de grephacer lo que grepestá haciendo en mi ejemplo y también agregar texto adicional.
Pausado hasta nuevo aviso.

Cuando dije "dos líneas", déjame repetir lo que quise decir, no quiero una pantalla de dos líneas para el estado duro. Estaba confundido por el %` y el backtickser en líneas separadas ... no parecían relacionados, pero ahora que leí la documentaciónbacktick , veo que los dos están relacionados / necesarios / sintaxis válida (aunque la sintaxis es bastante extraña IMO).
Trevor Boyd Smith

3

Para mí, esto funciona fácilmente con la inserción %Sen el estado duro.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

Sin embargo, esto muestra el nombre de la sesión sin la ID (como ${STY#*.}); en su ejemplo: project1.

(La misma respuesta a otras preguntas aquí y aquí para completar).


2
Para su información, el "% S" funciona en versiones más nuevas de gnu-screen (funciona en la versión Fedora 21 para mí) pero no en versiones anteriores (no funciona en la versión CentOS 6 para mí).
Trevor Boyd Smith
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.