Set-titre de l'écran à partir du script shell
-
18-09-2019 - |
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.
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îneESC]1;stringBEL
- Définir nom de l'icône chaîneESC]2;stringBEL
- Définir titre de la fenêtre chaîneoù 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\$ '