2009-11-06 19 views
44

¿Es posible establecer Screen-Title usando un script de shell?Establecer título de pantalla desde shellscript

pensé en algo así como el envío de los comandos de teclado Strg+A Shift-A Name <Enter>

Busqué alrededor de una hora sobre la manera de emular las pulsaciones de teclado en un script de shell, pero no encontró la respuesta.

¡Gracias por la ayuda!

Beerweasle

Respuesta

43

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

#!/bin/bash 

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

[Actualización] - a pedido del cliente También estoy incluyendo la solución propuesta por @Espo a continuación:

Dependiendo de la versión xterm o la distribución de Linux por encima de la línea puede o no puede trabajar y se puede probar los xterm-defaults:

#!/bin/bash 

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

Para obtener más información sobre los detalles, consulte: http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3 o consulte la respuesta de @Espo a continuación.

+9

Esto no funcionó para yo. Probé en xterm y en Konsole (desde KDE4). '" \ e] 2; title \ a "' trabajado. –

+1

Esto no funcionará si "Permitir SendEvents" está habilitado, que parece ser el predeterminado en las últimas versiones de ubuntu: https://bugs.launchpad.net/ubuntu/+source/xterm/+bug/495733 –

+0

Creo que puede aceptar que no hay una solución general (suspiro) .. el mejor ejemplo aquí es Konsole que * podría * usar \ 033k (o \ ek) pero prefiere \ e] 2; (o al revés ... como \ e] 2; parece ser el xterm predeterminado) – Shirkrin

7
set_screen_title() 
{ 
    echo -ne "\ek$1\e\\" 
} 
19

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

secuencias de escape xterm

de ventanas e iconos pueden modificarse los títulos en un xterm en ejecución mediante XTerm secuencias de escape. Las siguientes secuencias son útiles a este respecto:

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

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

Impresión de una de estas secuencias dentro de la xterm hará que la ventana o el título icono para ser cambiados.

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

la impresión de las secuencias de escape

Para obtener información que es constante durante toda la vida de esta cáscara, como anfitrión y nombre de usuario, que se bastan para simplemente eco de la cadena de escape en el archivo rc shell :

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

debería producir un título como usuario @ máquina, suponiendo que la cáscara las variables $ USER y $ anfitrión de una re establecer correctamente. Las opciones necesarias para el eco pueden variar según el shell (consulte los ejemplos a continuación).

Para obtener información que puede cambiar durante la vida útil del shell, tal como directorio de trabajo actual , estos escapes realmente tienen que aplicarse cada vez que los cambios rápidos. De esta manera la cadena se actualiza con cada comando emitir y realizar un seguimiento de información como corriente de trabajo directorio, nombre de usuario, nombre de host, etc. Algunas conchas proporcionan funciones especiales para este propósito, algunos no lo hacen y nosotros tiene que insertar las secuencias de título directamente en la cadena de solicitud. Este se ilustra en la siguiente sección.

+0

. La pantalla parece ignorar esto por completo, aunque he encontrado fragmentos usando "\ ekTITLE \ e \\" y "\ e] 0; TITLE \ a" (este último aparentemente sin ningún uso). Quizás esto esté relacionado con la configuración de "hardstatus" de la pantalla, estoy usando lo siguiente: cadena de hardstatus "SCREEN @% H:% -n -% t" (% t hace referencia al título de la ventana) – blueyed

3

También puede llamar a la pantalla y dilo a establecer un título:

screen -X title "new title" 

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

1

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

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' 
10

Las siguientes son otras formas de escritura del cambio de nombre de títulos de pantalla :

Al agregar las siguientes configuraciones a .ssh/config se establece el título de la pantalla automáticamente al iniciar sesión en un sistema em mediante SSH:

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

En lugar de %h, que representa el nombre de la máquina que se está conectando con, usted puede utilizar %n, que es el nombre/alias actual que utilizó para conectar a la máquina.

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

revertir automáticamente el título, de vuelta a la del nombre de host del host local, después de cerrar la sesión de SSH, puede agregar una secuencia de escape para que solicite la variable PS1 en .bashrc:

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

Estos trucos son especialmente útil cuando se utiliza una configuración .screenrc que le muestra en qué pantalla 'pestaña' está trabajando actualmente. Añadir algo como lo siguiente a .screenrc a conseguir este trabajo:

caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c" 
+0

Usando 'LocalCommand echo "$ TERM" | grep -q 'pantalla' && echo -ne "\ 033k% n \ 033 \\" ' también funcionará en tcsh –

8

Probar los siguientes comandos, no es necesario editar ningún archivo o configuración como ~/.bashrc, se puede usar en tiempo de ejecución.

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

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

Set/variable global local, como título: ($ USUARIO)

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

Conjunto salida de comando como el título : (nombre de host)

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

definido como predeterminado (volver):

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

Exactamente lo que quería gracias – Eun

+0

Eso cambia el prompt. – developerbmw

0
# add the following in your ~/.bashrc or ~/.bash_profile 
PROMPT_COMMAND='printf "\033]0;%[email protected]%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' 

o incluso mejor copiar todo el concepto de la personalización de sus configuraciones de bash entre una gran cantidad de anfitriones de here

Cuestiones relacionadas