2009-11-06 2 views
44

Est-il possible de définir le Screen-Title en utilisant un script shell?Définir le titre d'écran à partir de shellscript

Je pensais que quelque chose comme envoyer les commandes clés Strg+A Shift-A Name <Enter>

J'ai cherché pendant environ une heure sur la façon d'imiter les frappes dans un script shell, mais n'a pas trouvé la réponse.

Merci pour votre aide!

Beerweasle

Répondre

43

Vous pouvez définir le titre écran/xterm en utilisant les lignes suivantes:

#!/bin/bash 

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

[UPDATE] - sur demande Je comprenant aussi la solution proposée par @Espo ci-dessous:

En fonction de votre version de xterm ou de votre distribution Linux, la ligne ci-dessus peut ou ne peut pas fonctionner et vous pouvez essayer les paramètres par défaut xterm:

#!/bin/bash 

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

Pour plus d'informations sur les détails, voir: http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3 ou reportez-vous à la réponse @Espo ci-dessous.

+9

Cela ne fonctionne pas pour moi. J'ai testé en xterm et en Konsole (à partir de KDE4). '" \ e] 2; titre \ a "' travaillé. –

+1

Cela ne fonctionnera pas si "Allow SendEvents" est activé, ce qui semble être la valeur par défaut dans les dernières versions d'ubuntu: https://bugs.launchpad.net/ubuntu/+source/xterm/+bug/495733 –

+0

Je pense que nous peut être d'accord qu'il n'y a pas de solution fourre-tout (soupir). Le meilleur exemple ici est Konsole qui * pourrait * utiliser \ 033k (ou \ ek) mais préfère \ e] 2; (ou l'inverse .. comme \ e] 2; semble être le défaut xterm) – Shirkrin

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

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

séquences d'échappement xterm

titres de fenêtre et icône peuvent être modifiés dans un xterm en cours d'exécution en utilisant des séquences d'échappement XTerm . Les séquences suivantes sont utiles à cet égard:

  • ESC]0;stringBEL - Définir le nom de l'icône et le titre de la fenêtre à chaîne
  • ESC]1;stringBEL - Définir nom de l'icône chaîne
  • ESC]2;stringBEL - Set titre de la fenêtre chaîne

où ESC est le caractère d'échappement (\ 033), et BEL est le caractère de la cloche (\ 007).

L'impression de l'une de ces séquences au sein de le xterm entraînera la modification de la fenêtre ou du titre de l'icône .

Note: ces séquences s'appliquent à la plupart des dérivés xterm , tels que nxterm, color-xterm et rxvt. D'autres terminaux utilisent souvent des échappements différents; voir l'annexe pour des exemples. Pour la liste complète des séquences d'échappement xterm voir le fichier ctlseq2.txt, qui vient avec la distribution xterm, ou xterm.seq, qui vient avec la distribution rxvt .

Impression des séquences d'échappement

Pour plus d'informations qui est constante tout au long de la durée de vie de cette coquille, tels que l'hôte et le nom d'utilisateur, il sera suffisent pour faire écho simplement la chaîne évasion dans le shell fichier rc :

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

devrait produire un titre comme nom d'utilisateur nom d'hôte @, en supposant que le shell variables $ USER et un HOST $ re set correctement. Les options requises pour l'écho peuvent varier selon le shell (voir les exemples ci-dessous).

Pour plus d'informations qui peuvent changer au cours de vie de la coquille, comme le répertoire de travail courant , ces évasions vraiment besoin d'être appliqué chaque fois les changements rapides. De cette façon, la chaîne est mis à jour avec chaque commande vous émettez et pouvez garder une trace de informations telles que le répertoire de travail courant , nom d'utilisateur, le nom d'hôte, etc. Certaines coquilles offrent des fonctions spéciales à cet effet, certains ne le font pas et nous devez insérer les séquences de titre directement dans la chaîne d'invite. Ce est illustré dans la section suivante.

+0

Écran cependant semble ignorer complètement ceci, bien que j'ai trouvé des extraits en utilisant à la fois "\ ekTITLE \ e \\" et "\ e] 0; TITRE \ a" (ce dernier sans utilisation apparemment). Peut-être que cela est lié à l'écran "hardstatus" paramètre - J'utilise ce qui suit: hardstatus chaîne "SCREEN @% H:% -n -% t" (% t se réfère au titre de la fenêtre) – blueyed

3

Vous pouvez également appeler l'écran et lui dire définir un titre:

screen -X title "new title" 

Si vous êtes dans une fenêtre de l'écran, il établira le nom de cette fenêtre. Si vous n'êtes pas à l'écran, cela définira le nom de la fenêtre la plus récemment ouverte.

1

Pour ajouter à la réponse de Espo, les séquences d'échappement de xterm peuvent également être appliquées à 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 

Exemple

PS1='\e]0;string\a' 
10

Voici d'autres façons de scripter le changement de nom des titres d'écran :

L'ajout des paramètres suivants à .ssh/config définit automatiquement le titre de l'écran lors de la connexion à un syst em en utilisant SSH:

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

Au lieu de %h, qui représente le nom d'hôte de la machine que vous connectez avec, vous pouvez utiliser %n, qui est le nom/alias que vous avez utilisé pour se connecter à la machine réelle. REMARQUE: Vous devez utiliser OpenSSH> = v5.1 pour pouvoir utiliser les paramètres Localhost% n et% h. Consultez 'man ssh_config' pour plus d'informations sur LocalCommand.

Pour rétablir automatiquement le titre, le dos à celui du nom d'hôte de l'hôte local, après la fermeture de la session SSH, vous pouvez ajouter une séquence d'échappement vous invite variables PS1 à .bashrc:

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

Ces astuces sont particulièrement utile lorsque vous utilisez une configuration .screenrc qui vous montre dans quel onglet 'onglet' vous travaillez actuellement. Ajouter quelque chose comme ce qui suit à .screenrc pour obtenir ce travail:

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

Utilisation 'LocalCommand echo "$ TERM" | grep -q 'screen' && echo -ne "\ 033k% n \ 033 \\" ' fonctionnera aussi dans tcsh –

8

Essayer les commandes ci-dessous, pas besoin d'éditer un fichier ou une configuration comme ~/.bashrc, Peut être utilisé au moment de l'exécution.

Set texte statique titre: (Mon titre)

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

Set variable locale/globale comme titre: ($ USER)

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

Set sortie de commande en tant que titre : (nom d'hôte)

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

définie par défaut (Revert retour):

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

Exactement ce que je voulais merci – Eun

+0

Cela modifie l'invite. – 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/~}"' 

ou mieux encore copier le concept pour la personnalisation de vos configs bash entre beaucoup d'hôtes de here

Questions connexes