Establecer screen-title desde shellscript


¿Es posible establecer el Screen-Title usando un script de shell?

Pensé en algo como enviar los comandos clave Strg+A Shift-A Name <Enter>

Busqué durante aproximadamente una hora sobre cómo emular las pulsaciones de teclas en un script de shell, pero no encontré la respuesta.

Gracias por la Ayuda!

Beerweasle

Author: Thomas K, 2009-11-06

9 answers

Puede establecer el título de screen / xterm usando las siguientes líneas:

#!/bin/bash

mytitle="Some title"
echo -e '\033k'$mytitle'\033\\'

[ACTUALIZACIÓN] - por solicitud también estoy incluyendo la solución propuesta por @Espo a continuación:

Dependiendo de su versión de xterm o su distribución de linux, la línea anterior puede o no funcionar y puede probar los valores predeterminados de xterm:

#!/bin/bash

mytitle="Some title"
echo -e '\033]2;'$mytitle'\007'

Para más detalles ver: http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3 o refiérase a la respuesta de @Espo a continuación.

 45
Author: Shirkrin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-24 07:43:16

De http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3

Secuencias de escape Xterm

Se pueden cambiar los títulos de las ventanas y los iconos en un xterm en ejecución usando XTerm secuencias de escape. Los siguientes las secuencias son útiles a este respecto:

  • ESC]0;stringBEL Set Establecer el nombre del icono y el título de la ventana en string
  • ESC]1;stringBEL Set Establecer el nombre del icono en cadena
  • ESC]2;stringBEL Set Establecer el título de la ventana a string

Donde ESC es el personaje de escape (\033), y BEL es el carácter de campana (\007).

Imprimir una de estas secuencias dentro el xterm hará que la ventana o título del icono a cambiar.

Nota: estas secuencias se aplican a la mayoría derivados de xterm, como nxterm, color-xterm y rxvt. Otras terminales los tipos a menudo usan diferentes escapes; ver el apéndice para ejemplos. Para el lista completa de secuencias de escape xterm vea el archivo ctlseq2.txt que viene con el xterm distribución, o xterm.seq, que viene con el rxvt distribución.

Imprimir las secuencias de escape

Para información que es constante durante toda la vida útil de esta concha, como host y nombre de usuario, lo hará basta con hacer eco de la fuga cadena en el archivo rc de shell:

    echo -n "\033]0;${USER}@${HOST}\007"

Debe producir un título como nombre de usuario @ hostname, suponiendo que el shell las variables USER USER y HOST HOST se establecen correctamente. Las opciones requeridas para echo may varíe por shell (ver ejemplos debajo).

Para información que puede cambiar durante la vida útil de la cáscara, como la corriente directorio de trabajo, estos escapes realmente necesita ser aplicado cada vez el aviso cambia. De esta manera la cadena se actualiza con cada comando usted emite y puede realizar un seguimiento de información como el trabajo actual directorio, nombre de usuario, nombre de host, etc. Algunas cáscaras proporcionan funciones especiales para este propósito, algunos no y nosotros tiene que insertar el título secuencia directamente en la cadena del prompt. Este se ilustra en la siguiente sección.

 19
Author: Espo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-06 13:49:53

Las siguientes son otras formas de escribir el cambio de nombre de los títulos de pantalla:

Agregar los siguientes ajustes a .ssh/config establece el título de la pantalla automáticamente al iniciar sesión en un sistema usando SSH:

Host *
  PermitLocalCommand yes
  LocalCommand [ "$TERM" == 'screen' ] && echo -ne "\033k%h\033\\" 

En lugar de %h, que representa el nombre de host de la máquina con la que se está conectando, puede usar %n, que es el nombre / alias real que usó para conectarse a la máquina.

NOTA: Necesita OpenSSH >= v5.1 para poder usar los parámetros Localhost %n y %h. Echa un vistazo a 'man ssh_config' para obtener más información sobre LocalCommand.

Para revertir automáticamente el título, de nuevo al del nombre de host del host local, después de cerrar la sesión SSH, puede agregar una secuencia de escape a su variable de solicitud PS1 en .bashrc:

export PS1='you_favorite_PS1_here'
if [ "$TERM" == 'screen' ]; then
    export PS1=${PS1}'\[\033k\h\033\\\]'
fi

Estos trucos son especialmente útiles cuando se usa una configuración .screenrc que te muestra en qué pantalla 'tab' estás trabajando actualmente. Agregue algo como lo siguiente a .screenrc para que esto funcione:

caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c"
 11
Author: Johnny Halfmoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-19 22:38:08

Pruebe los siguientes comandos, sin necesidad de editar ningún archivo o configuración como ~/.bashrc, Se puede utilizar en tiempo de ejecución.

Establecer texto estático como título: (Mi título)

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Establecer variable local / global como título: (USER USER)

export PS1='\[\e]0;$USER\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Establecer la salida del comando como título: (hostname)

export PS1='\[\e]0;`hostname`\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Establecer como predeterminado (Revertir):

export PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
 8
Author: Seff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-20 01:30:36
set_screen_title ()
{
    echo -ne "\ek$1\e\\"
}
 7
Author: Randy Proctor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-06 13:49:17

También puedes llamar a screen y decirle que establezca un título:

screen -X title "new title"

Si estás en una ventana de pantalla, establecerá el nombre de esa ventana. Si no está en la pantalla, establecerá el nombre de la ventana abierta más recientemente.

 3
Author: idbrii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-24 22:14:32

Para añadir a la respuesta de Espo, las secuencias de escape xterm también se pueden aplicar a la variable Bash PS1

ESC]0;stringBEL -- Set icon name and window title to string
ESC]1;stringBEL -- Set icon name to string
ESC]2;stringBEL -- Set window title to string

Ejemplo

PS1='\e]0;string\a'
 2
Author: Steven Penny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-04 22:17:32

Para habilitar la actualización automática de títulos al saltar con ssh, agregue esto a

~/.bashrc

ssh() {
echo -n -e "\033k$1\033\\"
/usr/bin/ssh "$@"
echo -n -e "\033k`hostname -s`\033\\"
}
echo -n -e "\033k`hostname -s`\033\\"

Véase http://linuxepiphany.blogspot.com.ar/2010/05/good-screenrc-config-setup.html

 1
Author: mijhael3000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-09 19:06:05
 # add the following in your ~/.bashrc or ~/.bash_profile
 PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

O incluso mejor copie todo el concepto para personalizar sus configuraciones de bash entre muchos hosts de aquí

 0
Author: Yordan Georgiev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-28 14:36:23