65 votes

Comment changer le titre de l'onglet actuel du terminal en utilisant uniquement la ligne de commande ?

Aucune des réponses affichées actuellement ne fonctionne/répond à la question.

Conformément à ma question initiale, aucun des deux paramètres PS1 ni PROMPT_COMMAND n'a eu aucun effet.


En utilisant seulement une commande à l'invite de commande, comment puis-je changer le titre de l'onglet actuel du terminal ?

De nombreux messages le suggèrent :

echo -en "\033]0;New terminal title\a"

mais cela ne fait rien.

Aucune des réponses actuelles ne fonctionne (certaines ne répondent pas à la question), donc pour plus de clarté :

  • Une fois que le titre est modifié, je ne veux pas qu'il change si je change de répertoire, etc.
  • Je ne veux pas même sur tous les onglets. Je veux seulement définir le titre de l'onglet dans lequel je lance la commande.
  • Je veux que plusieurs onglets aient chacun un titre différent.

En outre, le PROMPT_COMMAND n'est pas définie dans mes sessions de terminal. Si je l'active :

PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'

il n'a aucun effet.

Quelle est la commande correcte ?


Pour votre information, la sortie de uname -a est :

Linux d136172 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

4voto

Graeme Hutchison Points 6643

Instructions

  1. Ajoutez settitle() à votre .bashrc .
  2. source ~/.bashrc
  3. settitle Banana

settitle()

function settitle()
{
    if [ $# -eq 0 ]
        then
        eval set -- "\\u@\\h: \\w"
    fi

    case $TERM in
        xterm*) local title="\[\033]0;$@\007\]";;
        *) local title=''
    esac
    local prompt=$(echo "$PS1" | sed -e 's/\\\[\\033\]0;.*\\007\\\]//')
    PS1="${title}${prompt}"
}

4voto

Maythux Points 77506

Vous pouvez le faire, soit en CLI, soit en GUI (je suppose que vous utilisez gnome-terminal, vous pouvez le faire pour les autres en remplaçant simplement le nom de l'application) :

Dans CLI Exécutez la commande :

gconftool-2 --set /apps/gnome-terminal/profiles/Default/title --type=string "New Terminal Name"

Remarque : le nouveau nom est appliqué à toutes les instances des onglets du terminal, et non au seul onglet courant.

enter image description here

Ou à partir de l'interface graphique :

Aller au menu : Terminal --> Définir le titre --> Entrez le nouveau titre puis sauvegardez.


Maintenant, pourquoi votre commande ne fonctionne pas ?

Vous devez ajouter cette ligne à la .bashrc et non directement dans votre terminal.

gedit .bashrc

Ajoutez cette ligne :

PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'

Ensuite, enregistrez et sourcez le fichier bashrc.

source .bashrc

3voto

JRichardsz Points 173

Basé sur la réponse de @muru

PS1 définit le titre, toute tentative de définir le titre à l'aide d'une commande ou de PROMPT_COMMAND échouera, puisque l'invite est imprimée après toutes ces commandes.

Cela a fonctionné pour mon S.O. élémentaire :

PS1='\u:\W\$ '
PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'

Je l'exécute dans chaque nouvel onglet :

tab 1

tab 2

Et comme le montre l'image précédente, j'ai plusieurs onglets avec un nom unique.

16.04.1-Ubuntu

1voto

Der Bosst Points 11

Utilisation de bash, wmctrl, xprop, ps

1) Pour un programme actif de longue durée :

Par exemple, lancer un programme (ranger) fonctionnant dans un terminal, lancé à partir du bureau, changer le titre, une fois, après un certain délai (5 secondes) lorsque le programme démarre :

startranger.sh :

#!/bin/bash
/usr/local/bin/changetitle.sh 5 ranger
/usr/local/bin/ranger

changetitle.sh :

#!/bin/bash
delay="$1"
shift
wintitle="$*"
winid=`xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/'`
/bin/bash -c "sleep $delay; wmctrl -i -r $winid -N \"$wintitle\"" &

2) Si vous exécutez une session de terminal sans exécuter un programme actif, mettez à jour le titre sur une boucle qui se termine lorsque votre terminal quitte :

changetitleloop.sh 1 maintenance for server

l'exécution de la commande ci-dessus mettra à jour le titre du terminal actuel toutes les 1 seconde, même si vous cd (on peut le changer plusieurs fois), en utilisant :

changetitleloop.sh

#!/bin/bash
interval="$1"
shift
wintitle="$*"
termpid="$(ps -p $$ -o ppid= | sed -e 's/^[ \t]*//')"
winid=`xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/'`
/bin/bash -c "ss=\$$; echo \$ss > /tmp/term-$termpid.pid; while x=\$(wmctrl -i -r $winid -N \"$wintitle\"); ret=\$?; sleep $interval; owner=\$(cat /tmp/term-$termpid.pid); [ \$ret -eq 0 ] && [ \$ss -eq \$owner ]; do continue; done;" &

0voto

Mike Amy Points 101

Une solution peut être d'installer la dernière version de tmux .

tmux permet de définir des titres par volet, activés par cette commande :

tmux set -g pane-border-status top

Ils peuvent également être affichés sur le fond.

Les titres sont ensuite définis par une séquence d'échappement :

printf '\033]2;%s\033\\' 'My Pane Title'

Chaque volet peut avoir son propre titre et tous les titres s'affichent en permanence.

Les volets de tmux ressembleront alors à ceci :

0 "My Pane Title"1 "Another Pane"
>                        >

Ceci a été testé sur linux mint 18.2 (comme Ubuntu) avec tmux 2.8. L'installation s'est faite à partir d'une archive.

Si vous souhaitez être plus productif dans votre terminal, tmux offre également de nombreuses autres fonctionnalités.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X