Pregunta

¿Es posible establecer el título de la pantalla usando un script de shell?

pensé en algo así como el envío de los comandos de teclas Ctrl + A cambiar - A Name introduzca

He buscado durante aproximadamente una hora sobre la manera de emular las pulsaciones de teclado en un script de shell, pero no encontró la respuesta.

¿Fue útil?

Solución

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 más información sobre los detalles ver: http: // www .faqs.org / docs / Linux-mini / xterm-Title.html # s3 o hacer referencia a la respuesta por @Espo a continuación.

Otros consejos

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

  

secuencias xterm de escape

     

Los nombres de ventanas e iconos pueden ser cambiados   en un xterm en ejecución mediante XTerm   secuencias de escape. El seguimiento   secuencias son útiles a este respecto:

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

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

     

Impresión de una de estas secuencias dentro de   el xterm hará que la ventana o   icono del título que desea cambiar.

     

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

     

Impresión de las secuencias de escape

     

Para obtener información que es constante   durante toda la vida de esta cáscara,   tales como anfitrión y nombre de usuario, lo hará   bastará simplemente eco de la fuga   cadena en el archivo de shell rc:

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

debe producir un título como   username @ hostname, suponiendo que la cáscara   las variables $ USER y $ HOST se establecen   correctamente. Las opciones necesarias para   eco puede variar por Shell (ver ejemplos   a continuación).

     

Para obtener información que puede cambiar durante   la vida de la concha, tales como corrientes   directorio de trabajo, estos escapes   realmente se necesita para ser aplicado cada vez   los cambios rápidos. De esta manera el   cadena se actualiza con cada comando   emitir y realizar un seguimiento de   información como el trabajo actual   directorio, nombre de usuario, nombre de host, etc.   Algunas conchas proporcionan funciones especiales   para este fin, algunos no lo hacen y nosotros   tenga que insertar las secuencias de títulos   directamente en la cadena de petición. Esta   se ilustra en la siguiente sección.

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

Adición de los siguientes ajustes para .ssh/config establece el título de la pantalla automáticamente al iniciar sesión en un sistema que utiliza 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, puede utilizar %n, que es el nombre / alias actual que utilizó para conectar a la máquina.

NOTA: Es necesario OpenSSH> = v5.1 para poder utilizar la máquina local% n% y parámetros h. Echa un vistazo a 'hombre ssh_config' para obtener más información sobre LocalCommand.

Para volver 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 PS1 variable de indicador 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 utiliza una configuración .screenrc que se muestra en la pantalla lo que 'ficha' que 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"

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

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

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

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

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

Seleccione la salida de comando como título: (nombre de host)

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\$ '
set_screen_title ()
{
    echo -ne "\ek$1\e\\"
}

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 usted no está en la pantalla, se establecerá el nombre de la ventana abierta más recientemente.

Para añadir a la respuesta de Espo, las secuencias de escape xterm también se pueden aplicar a la variable de 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'

Para activar la actualización automática del título al saltar alrededor con ssh, añadir 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\\"

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

 # 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 copiar todo el concepto de la personalización de sus configuraciones de bash entre una gran cantidad de anfitriones de aquí

Mi solución a este problema fue la creación de un script bash y añadirlo a mi archivo ~ / .bashrc:

set-title() {
  ORIG==$PS1
  TITLE="\e];$@\a"
  PS1=${ORIG}${TITLE}
}

Ahora cuando estoy en cualquier sesión de shell bash, I tipo "set-título desired_title" y cambia a "título deseado". Esto funciona para varias versiones de Ubuntu, actualmente en la cinética 16.04

Tengo esta solución de aquí . Estaba buscando otra vez, no podía encontrarlo y pensé que había puesto aquí para cualquier persona interesada.

Tengo esta solución a partir de la experimentación con otros, como @ flurin-arner Empecé el @ Weston ganger set-título () . También utilicé @ imgx64 PROMPT_DIRTRIM sugerencia. También estoy usando @itseranga rápida git rama , aunque esto no tiene nada que ver con la pregunta sí muestra lo que puede hacer con el símbolo.

En primer lugar, como se muestra por Weston y por encima

 TITLE="\[\e]2;$*\a\]"

se puede utilizar para ajustar manualmente el Título Terminal, "$ *" es la entrada de línea de comandos, pero no lo que quieren.

segundo, como figura También estoy añadiendo rama git a mi sistema, de nuevo, no parte de la pregunta.

export PROMPT_DIRTRIM=3
parse_git_branch() {
       git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
     }

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

tercero, mediante un experimento He copiado el código TÍTULO anteriores, ajuste el $ * a una cadena fija y probado esto:

see: \[\e]2;'SomeTitleString'\a\]

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;'SomeTitleString'\a\] $ "

Esto tuvo el efecto deseado! En última instancia, quería que la ruta de la base como mi título. PS1 Parámetros muestra que \ W es la base recorrido por lo que mi solución es la siguiente:

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;\W\a\] $ "

sin la rama git:

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\[\033[00m\]\[\e]2;\W\a\] $ "

resultando en un símbolo con git-rama:

user@host ~/.../StudyJava (master) $  

resultando en un rápido sin parse_git_branch:

   user@host ~/.../StudyJava $  

donde pwd da

/home/user/somedir1/otherdir2/StudyJava

y del terminal Nombre

StudyJava

NOTA: De @seff encima estoy reemplazando esencialmente el "Mi título" con "\ W"

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top