Question

Est-il possible de définir le titre d'écran à l'aide d'un script shell?

Je pensais que quelque chose comme envoyer les raccourcis clavier ctrl + A déplacer - A Name entrez

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

Était-ce utile?

La solution

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 suis aussi, y compris la solution proposée par @Espo ci-dessous:

En fonction de votre version xterm ou votre distribution linux la ligne ci-dessus peut ou peut ne pas fonctionner et vous pouvez essayer les valeurs par défaut xterm-:

#!/bin/bash

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

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

Autres conseils

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

  

séquences d'échappement xterm

     

fenêtres, et icône peuvent être modifiés   dans un xterm en cours d'exécution en utilisant XTerm   Séquences d'échappement. Le suivant   Les séquences sont utiles à cet égard:

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

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

     

Impression d'une de ces séquences au sein de   xterm provoquera la fenêtre ou   titre de l'icône à modifier.

     

Remarque: ces séquences sont applicables à la plupart   les dérivés de xterm, tels que nxterm,   couleur xterm et rxvt. autre borne   types utilisent souvent échappe différents; voir   l'annexe pour des exemples. Pour le   La liste complète des séquences d'échappement xterm   voir le fichier ctlseq2.txt, qui vient   avec la distribution d'émulation de terminal, ou   xterm.seq, qui vient avec le rxvt   distribution.

     

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   il suffit simplement de faire écho l'évasion   chaîne dans le fichier shell rc:

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

devrait produire un titre comme   nom d'utilisateur @ nom d'hôte, en supposant que la coquille   les variables $ USER et $ HOST sont fixés   correctement. Les options requises pour   écho peut varier d'un shell (voir les exemples   ci-dessous).

     

Pour plus d'informations qui peuvent changer au cours de   la durée de vie de la coquille, comme le courant   répertoire de travail, ces évasions   vraiment besoin d'être appliqué chaque fois   les changements rapides. De cette façon, la   chaîne est mise à jour avec chaque commande   vous émettez et pouvez garder une trace de   des informations telles que travail en cours   répertoire, 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   doivent insérer les séquences de titre   directement dans la chaîne d'invite. Cette   est illustré dans la section suivante.

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

Ajout des paramètres suivants à .ssh/config définit le titre de l'écran automatiquement lors de la connexion à un système 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 réel / alias que vous avez utilisé pour se connecter à la machine.

REMARQUE: Vous devez OpenSSH> = v5.1 pour être en mesure d'utiliser les paramètres h n Localhost% et%. Consultez 'ssh_config man' pour plus d'informations sur LocalCommand.

Pour revenir 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 pour vous PS1 variable d'invite à .bashrc:

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

Ces astuces sont particulièrement utiles lors de l'utilisation d'une configuration .screenrc qui vous montre dans quel écran « 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"

Essayez les commandes ci-dessous, pas besoin de modifier un fichier ou une configuration comme ~ / .bashrc, peut être utilisé lors de l'exécution.

Définir texte statique titre: (Mon titre)

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

Définir la variable locale / globale comme titre: ($ USER)

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

Régler la sortie de commande comme titre: (le nom d'hôte)

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

Définir par défaut (revenir):

export PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
set_screen_title ()
{
    echo -ne "\ek$1\e\\"
}

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 sera mis le nom de cette fenêtre. Si vous n'êtes pas dans l'écran, il définira le nom de la fenêtre la plus récemment ouverte.

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

Pour activer la mise à jour automatique de titres lors d'un saut autour avec ssh, ajoutez ceci à ~/.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\\"

Voir 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/~}"'

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

Ma solution à ce problème était de créer un script bash et l'ajouter à mon fichier ~ / .bashrc:

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

Maintenant, quand je suis dans une session shell bash, je tape « set-titre desired_title » et il passe à « titre souhaité ». Cela fonctionne pour plusieurs versions d'Ubuntu, actuellement cinétique 16,04

Je suis cette solution de . Je cherchais encore, n'a pas pu le trouver et je pensais que je poste ici pour toute personne intéressée.

Je suis cette solution d'expérimenter avec d'autres, comme @ flurin-Arner j'ai commencé le @ weston-ganger set-titre () . J'ai aussi utilisé @ imgx64 PROMPT_DIRTRIM suggestion. J'utilise aussi @itseranga invite de branche git , il montre bien que cela n'a rien à voir avec la question que vous pouvez faire avec l'invite.

Tout d'abord, comme indiqué par weston et au-dessus

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

peut être utilisé pour régler manuellement le titre Terminal, « $ * » est entrée commandline, mais pas ce que nous voulons.

2 comme dit, je suis également d'ajouter la branche git à mon invite, encore une fois ne fait pas partie de la question.

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\] $ "

3, par expérience, je copiais le code TITLE ci-dessus, définissez le $ * à une chaîne fixe et essayé ceci:

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

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

Ceci a eu l'effet désiré! En fin de compte, je voulais que le chemin de base comme mon titre. PS1 Param montre que \ W est la base chemin donc ma solution est la suivante:

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

sans la branche git:

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

entraînant une invite avec branche git:

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

entraînant une invite sans parse_git_branch:

   user@host ~/.../StudyJava $  

où PWD donne

/home/user/somedir1/otherdir2/StudyJava

et titre Terminal

StudyJava

NOTE: De @seff ci-dessus, je suis essentiellement remplaçais le "Mon titre" avec "\ W"

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top