2010-08-12 11 views
13

Tengo un comando que quiero ejecutar en .bashrc solo cuando la ventana del terminal actual es administrada por la pantalla GNU. ¿Cómo hago esto? ¿Hay una variable de entorno para eso? Solía ​​tener¿Cómo se puede saber si la sesión de la terminal actual está en la pantalla GNU?

 
if [ -n "$WINDOW" ]; then 
    command 
fi 

Pero por lo que puedo decir, $WINDOW puede o no se puede definir a través de todas las sesiones de pantalla gestionados.

+0

posible duplicado de [¿Cómo puedo saber si estoy en una pantalla?] (Http://stackoverflow.com/questions/5392618/how-can-i-tell-whether-im-in-a -screen) – LopSae

Respuesta

17

Compruebe si la variable de entorno $ STY (contiene información sobre la pantalla) o por $ TERM siendo 'pantalla' (probablemente menos confiable).

+0

He estado usando scripts de culto a la carga que usaban $ TERM hasta ahora. ¡Gracias por esto! Para empeorar las cosas, algunos de los cuadros en los que se ejecutan las secuencias de comandos tienen versiones tan antiguas de bash que los condicionales son limitados (por ejemplo, no coincide parcialmente). – Jan

4

cheque $TERM, que se establece en 'screen' en la sesión de pantalla .. (pero no 100% garantizado)

ACTUALIZACIÓN

Como alternativa, puede utilizar el hecho de que en la pantalla, contiene $TERMCAP subcadena pantalla:

[[ $TERMCAP =~ screen ]] && echo "in screen" 

tampoco 100% garantizada

Update2

si ninguno enfoque funciona, se puede encontrar algo de inspiración en screen manual

+0

La pantalla parece heredar el valor $ TERM de la sesión de terminal que la inicia. Entonces, en mi caso, es xterm-256color y depende del entorno. Lo que quiero es la solución general que pueda funcionar en cualquier entorno. – OTZ

+0

@otz tenía miedo de eso :) actualizó otra posibilidad – mykhal

+0

El enfoque $ TERMCAP se aplica a más casos, pero pierde los casos en los que SSH a otro host en la misma ventana de pantalla, en cuyo caso $ TERMCAP no contendrá 'pantalla' subcadena Por lo tanto, la aplicabilidad es exactamente igual a $ WINDOW, ya que también pierde su valor una vez que ssh a otro host. Pero todo igual, el predicado $ WINDOW funciona más rápido. – OTZ

1

Comprobar variable $ TERM

+0

Puede o no funcionar, dependiendo del entorno. – OTZ

2

Me gustaría sugerir una solución alternativa que siempre esté visible y no requiera verificar que se encuentre dentro de una sesión screen.

Sólo añadir/editar un archivo en la carpeta de ~/.screenrc$HOME y añadir caption comando:

caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m} %Y-%m-%d %0c" 

y obtendrá en la parte inferior una línea que es siempre visible y de color.

Screen session on host (system load: 1.50 1.40 1.30)  2017-04-23 14:06 

Tenga en cuenta:

Cuando esté dentro de la pantalla en host1 y abrir otra sesión SSH para host2 y la pantalla abierta no que también tiene .screenrc obtendrá dos líneas en la parte inferior apiladas de abajo hacia arriba (como un envoltorio).

Esto es MUY útil en ese caso!

Screen session on host2 (system load: 0.01 0.03 0.05) 2017-04-23 14:14 Screen session on host1 (system load: 0.00 0.00 0.00) 2017-04-23 14:14


Otros detalles:

https://www.gnu.org/software/screen/manual/html_node/Caption.html

Command: caption always|splitonly [string]

https://www.gnu.org/software/screen/manual/html_node/String-Escapes.html#String-Escapes


yo encontramos este golpeó here en SO.

Cuestiones relacionadas