Tengo un directorio de inicio compartido que se monta automáticamente a través de NFS en todos los servidores UNIX en los que inicio sesión. Me gustaría tener un único .screenrc que (por ejemplo) coloque el nombre de host en la línea de estado duro en un color diferente para indicar cuándo estoy conectado a producción versus desarrollo; nuestros nombres de host son tales que esto se puede hacer fácilmente mediante el uso de la coincidencia de patrones.
¿Hay alguna forma de poner declaraciones condicionales en .screenrc? Un vistazo rápido a la página del manual no parece revelar nada obvio.
EDITAR:
Para aclarar, ya tengo una línea de estado duro personalizada; Quiero cambiar algunos de los colores / campos que se muestran en función del nombre de host en el que se invoca la pantalla. Ya tengo algo así para mi PS1, sin embargo, preferiría hacer esto en la línea de estado de la pantalla cuando salte de estos hosts a enrutadores / conmutadores, lo que no me permite hacer una coloración rápida. De esta forma, puedo tener una ventana para la producción y otra para el desarrollo, con el color de la línea de estado de la pantalla que me indica en cuál estoy de un vistazo.
fuente
Respuestas:
Veo dos formas de hacer esto, la primera es hacer un archivo .screenrc por host.
Como
.screenrc_serverA
,.screenrc_serverB
...En su script de inicio de shell, configure SCREENRC en algo como
.screenrc_`hostname`
Por supuesto, puede usar el comando de origen de la pantalla para incluir algo como
.screenrc_default
en cada archivo .screenrc_ ... personalizado para que solo contenga una línea de título / estado duro y no el configuración completa cada vez.La segunda forma sería ejecutar comandos como
screen -X hardstatus lastline ...
(usando las pruebas if para ejecutar el comando con un valor diferente para ... dependiendo del nombre de host) en su script de inicio de shell. Cuando inicie sesión en el servidor, screen -X no hará nada porque la pantalla aún no se iniciará, pero cada vez que abra una nueva ventana en la pantalla, el estado duro se actualizará.Por supuesto, la primera solución es mejor porque la segunda actualizará la línea de estado duro cada vez que abra una ventana de noticias, lo que probablemente sea inútil ya que el nombre de host no habrá cambiado.
fuente
hostname
". Tengo un problema para incluir `en la publicación@radius es acertado con lo de SCREENRC, pero no fue una respuesta muy completa, así que explicaré ...
~ / .bashrc
* ¡Utiliza siempre nuevas pruebas !
Una palabra sobre los personajes de escape
La forma correcta de incluir colores en los scripts es con tput, no con caracteres de escape. Sus caracteres de escape son específicos de su terminal. El comando tput es consciente del terminal. Escribí esto para cuando necesito ponerme elegante en mis scripts:
~ / bin / COLORS.sh
También hice un script para demostrar el uso de tput. Puedes obtenerlo de esta esencia.
Ver:
http://www.ibm.com/developerworks/aix/library/au-learningtput/?S_TACT=105AGY06
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html
fuente
setaf
se usa para el fondo , aunque debería sersetab
( b en lugar de f ) y el segundo es que usarlo9
por defecto no funciona para mí, tal vez porque la versión tput no es estándar (tampoco en su caso o el mío, simplemente no lo sé y realmente no importa mucho)Simplemente configúrelo en su .screenrc como la variable hardstatus. Siempre que use una variable como% H para el nombre de host, cambiará para coincidir con cualquier nombre de host en el que trabaje.
Le dará una línea de estado en la parte inferior que se ve como
el nombre de host es rojo sobre negro, la hora es verde sobre negro, la fecha es amarilla sobre negro. La ventana marcada con * es la ventana actual, que se muestra en texto azul sobre fondo blanco. ventana marcada con - es la ventana activa anteriormente, que muestra texto blanco sobre negro. la ventana 1, arriba, no es actual ni anterior, y se mostraría en blanco sobre negro. las otras posibilidades le mostrarían otros usuarios adjuntos a ventanas, blanco sobre negro, y estarían marcados con +.
tener la visualización de la hora también ayuda a mantener vivo si ssh a servidores remotos para ejecutar la pantalla, ya que el tiempo que cambia cada minuto mantendrá viva su sesión, incluso si el shell está inactivo en el lado remoto.
fuente
Puede colorear la línea de estado desde una secuencia de comandos de backtick imprimiendo
\005{..r}
o similar (r
para rojo, etc., como dentro de.screenrc
sí mismo), para que pueda cambiar el nombre del host para llegar a un número, o simplemente tener un conjunto de declaraciones condicionales para establecer el color. Como ejemplo, aquí hay un script para cambiar el color e imprimir el nombre de host para usar dentro de la pantalla:Luego agrega una entrada para este script al
.screenrc
y referencia dentro del hardstatus o el título como% 4`:Esto supone que es poco probable que cambie el nombre de host, por lo tanto, el tiempo de espera y la validez de 1 hora (3600 segundos); los bits que rodean la llamada al backtick en sí solo ponen la fecha al comienzo de la línea y la hora después del nombre de host.
Incluso puede usar este mecanismo para colorear la salida de un script en función del valor del nivel de carga de la batería, la carga del sistema o la temperatura, suponiendo que tenga acceso a los valores relevantes desde un script de shell.
fuente
screen
escape\005
: de esa manera, todo el formato condicional se puede colocar en un script de shell mucho más legible en lugar de aquellos que ya son difíciles de analizarcaption
.hardstatus
directivas de pantalla.Si desea evitar muchos scripts, puede intentar esto:
grep solo imprimirá el nombre de host si coincide con "prod", por lo que puede conectarlo a un backtick y la
%?
construcción. ¡Viola!fuente